**
в zsh
соответствует точно так же, как *
, но допускает соответствие между /
в путях. Таким образом, шаблон **/*.jpg
будет расширяться до пути к любому файлу, который имеет суффикс имени файла .jpg
в любом месте текущего каталога или ниже него.
Шаблон **
также доступен в bash
, если он включен с помощью shopt -s globstar
. В оболочке ksh93
он тоже есть, если он включен с помощью set -o globstar
.
Параметр --
предотвращает интерпретацию любого пути (, совпадающего с приведенным выше шаблоном ), который начинается с тире, параметром du
как параметр командной строки. --
останавливает синтаксический анализ командной строки du
от поиска дополнительных параметров. Это не зависит от оболочки, но является POSIX «служебной директивой » для стандартных утилит.
--
можно было удалить, если шаблон подстановки имени файла был изменен на ./**/*.jpg
.
Команда даст вам общий размер всех *.jpg
файлов в текущем каталоге или ниже, извлекая строку с общим объемом из выводаdu
(запустите команду без | grep total
, чтобы увидеть, что du
производит ).
Shell printf использует формат столько раз, сколько у него есть аргументов. Таким образом, он имеет встроенный цикл -.
Если бы в строке было три строки %, она использовала бы три аргумента одновременно. В последний раз по умолчанию один или два аргумента будут пустыми/нулевыми, если это необходимо.
"$@" расширяет все текущие аргументы $1, $2,... для разделения строк в кавычках.
В формате печати (первый аргумент)
\t (escaped t )является табуляцией и имеет отступ в 8 пробелов.
%s берет следующий неиспользуемый аргумент и вставляет его как строку.
\n (escaped n )является новой строкой и заставит следующую строку начинаться ниже и в столбце.
man bash
— это команда, которая показывает вам все встроенные -команды, включая пару страниц о printf.
man -s 1 printf
— это команда, которая показывает, что делает внешняя команда /bin/printf. Он очень похож на (, но не идентичен )встроенному в bash -, но его намного легче найти.