ZFS несколько продемонстрировал рост, или уменьшение файловой системы бессмысленно.
Файловая система ZFS может, но не требоваться, чтобы иметь предопределенный размер. В последнем случае нет никакой потребности уменьшить файловую систему, учитывая факт нет никакого потраченного впустую пространства, в отличие от большинства если не все другие файловые системы.
Конечно, базовые физические устройства имеют полный предел, но нет никакой потребности добавить произвольные пределы.
Предложение APROGRAMMER использования xargs
является часто лучшим, но другая опция состоит в том, чтобы использовать перенаправление в a while
цикл, который позволяет дополнительным командам быть сделанными и переменные, которые будут установлены:
while read -r dir; do mkdir $dir; done < myfile
Пример более сложной структуры был бы:
now=`date +%Y%m%d.%H%M%S`
while read -r dir; do
newdistfile="/tmp/dist-`echo $dir | tr / _`.tgz"
mv $dir ~/backups/$dir.$now &&
mkdir $dir &&
tar xzfC $newdistfile $dir
done < myfile
Это не что-то это xargs
мог обойтись без записи 'программы помощника'.
По крайней мере, в ударе, пока нет никаких имен файлов, содержащих пробелы и новые строки, это:
mkdir $(< myfile)
работы. Таким образом, у нас есть бесполезное использование for
, xargs
также.
<не запускает новый процесс в ударе, в отличие от cat
, но я не знаю для ksh
.
Это - решение ближе Вашего исходного сценария, все еще избегающего бесполезной кошки
for dir in $(<myfile); do mkdir $dir; done
Это все еще содержит бесполезный цикл все же.
Я не сказал бы, что это - бесполезное использование кошки.
В классическом смысле UUOC означает писать:
cat file | some_command and its args ...
вместо эквивалента и более дешевый
<file some_command and its args ...
или (эквивалентно и более классически)
some_command and its args ... < file
В этом случае:
for dir in $(cat myfile); do mkdir $dir; done
нет никакой команды в который вывод cat
передается по каналу.
Существуют, конечно, альтернативы, которые не используют cat
. В частности, для удара и ksh $(<myfile)
вероятно, будет быстрее, чем $(cat myfile)
, хотя не вся поддержка оболочек та конструкция. Но я не называл бы исходный код "бесполезным использованием кошки" больше, чем я назову решение APROGRAMMER "бесполезным использованием xargs".
С bash
4 и ограниченным ARG_MAX
mapfile -t <file && mkdir -- "${MAPFILE[@]}"
xargs
read
? Это - мое понимание этоxargs
разветвит новый процесс (в отличие от этого,read
это - встроенная оболочка). Разве это не что-то, чего Вы хотите избежать? – rahmu 19.12.2011, 18:40xargs
будет воздействовать на единственную команду, поэтому если Вы захотите иметь составной оператор (как больше чем один,if
,while
илиfor
, и т.д.), или установка переменной, затем Вы не можете использоватьxargs
. Да, xargs разветвит один новый оператор плюс один для некоторого количества входных строк, которое является очень мало служебным. Однако некоторые более старые версииxargs
не берите a-0
опция, таким образом, awhile read
будет способ пойти, если может быть пробел во входных именах каталогов. – Arcege 19.12.2011, 19:38