Для пользователей, перешедших из других менеджеров пакетов, могут применяться следующие грубые аналогии. Но не делайте из этого слишком много выводов, потому что GUIX позволяет каждому пользователю использовать свой собственный набор пакетов и даже собственную версию GUIX!
guix pull
похож на apt-get update
тем, что загружает новый список доступных пакетов, заменителей и производных. Однако он также устанавливает для вас новую версию GUIX! (по причинам)
guix package -i
(синонимыguix install
)и guix package -u
аналогичны apt-get install
или apt-get upgrade
тем, что вы можете устанавливать/обновлять пакеты, но только если вы получили обновленный список пакетов(apt-get update
/guix pull
)до.
По умолчанию guix pull
изменяет профиль ~/.config/guix/current
. Этот профиль предназначен для создания профилей и всего, что связано (, например. установка пакетов ).
По умолчанию guix install
или его синоним guix package -i
изменяет профиль ~/.guix-profile
. Этот профиль предназначен для любой продуктивной работы (? )работа, которую вы делаете.
См. этот вопрос SO для получения дополнительной информации об этих профилях
Вот способ сделать это, используя только find
, если ваша версия поддерживает -printf.
find. -name "* *" -printf "\"%p\"\n" -o -print
Вы можете сделать это, направив вывод наawk
:
find. | awk '/ /{ printf"\"%s\"\n", $0; next } { print }'
Предположим, вы хотите сгенерировать выходные данные в формате CSV с помощью инструментов GNU:
find. -print0 |
LC_ALL=C sed -z '/[",[:space:]]/{s/"/""/g; s/.*/"&"/}' |
tr '\0' '\n'
То есть, если имя файла содержит хотя бы один символ пробела "
, ,
или ASCII (, включая, помимо прочего, SPC, TAB, CR и новую строку, все специальные в CSV ), переведите "
в ""
(, как в большинстве форматов CSV избегают "
s ), и заключите строку в двойные кавычки.
Эта часть выполняется с использованием NUL в качестве разделителя записи, поскольку это единственный байт, который не может встречаться в пути к файлу. А затем мы переводим NUL в новую строку с помощью tr
.
В системах, отличных от -GNU, вы всегда можете прибегнуть кperl
:
find. -print0 | perl -l -0 -pe 'if (/[",\s]/) {s/"/""/g; $_ = "\"$_\""}'
После
touch 'a b' $'a\nb' a,b a_b $'a\200b' 'a"b'
Дают:
.
"./a""b"
./a_b
"./a,b"
./a�b
"./a
b"
"./a b"
(где �
— это представление моего терминала того \200
байта, который не образует допустимый символ в моей локали UTF -8 ).
Чтобы исключить .
и префикс ./
, замените -print0
на -mindepth 1 -printf '%P\0'
(, хотя -printf
относится к GNU -). Что дает:
"a""b"
a_b
"a,b"
a�b
"a
b"
"a b"
-print0
и -mindepth
также являются расширениями GNU, но с тех пор они были скопированы в несколько других реализаций. Если ваша реализация — одна из немногих, где их до сих пор нет, вы можете заменить:
find. -print0
сfind. -exec printf '%s\0' {} +
find. -mindepth 1 -printf '%P\0'
сfind. ! -name. -exec sh -c 'for i do printf "%s\0" "${i#./}"; done' sh {} +