Команды для более опытных пользователей
-exec COMMAND \;
Для каждого найденого файла, соответствующего заданному шаблону поиска, выполняет команду COMMAND. Командная строка должна завершаться последовательностью символов \; (здесь символ ";" экранирован обратным слэшем, чтобы информировать командную оболочку о том, что символ ";" должен быть передан команде find как обычный символ). Если COMMAND содержит {}, то find подставляет полное имя найденого файла вместо "{}".
![]() |
Не следует путать опцию -exec команды find с внутренней командой Bash — exec. |
Пример 12-3. Badname, удаление файлов в текущем каталоге, имена которых содержат недопустимые символы и пробелы.
Пример 12-4. Удаление файла по его номеру inode
Дополнительные примеры по использованию команды find вы найдете в Пример 12-25, Пример 3-4 и Пример 10-9. В страницах справочного ркуоводства (man find) вы найдете более подробную информацию об этой достаточно сложной и мощной команде.
Команда передачи аргументов указанной команде. Она разбивает поток аргументов на отдельные составляющие и поочередно передает их заданной команде для обработки. Эта команда может рассматриваться как мощная замена обратным одиничным кавычкам. Зачастую, когда команды, заключенные в обратные одиночные кавычки, завершаются с ошибкой too many arguments (слишком много аргументов), использование xargs позволяет обойти это ограничение. Обычно, xargs считывает список аргументов со стандартного устройства ввода stdin или из канала (конвейера), но может считывать информацию и из файла.
Если команда не задана, то по-умолчанию выполняется echo. При передаче аргументов по конвейеру, xargs допускает наличие пробельных символов и символов перевода строки, которые затем автоматически отбрасываются.
ls | xargs -p -l gzip — упакует с помощью gzip все файлы в текущем каталоге, выводя запрос на подтверждение для каждого файла.
![]() |
xargs имеет очень любопытный ключ -n NN, который ограничивает количество передаваемых аргументов за один "присест" числом NN. ls | xargs -n 8 echo — выведет список файлов текущего каталога в 8 колонок. |
![]() |
Еще одна полезная опция — -0, в комбинации с find -print0 или grep -lZ позволяет обрабатывать аргументы, содержащие пробелы и кавычки. find / -type f -print0 | xargs -0 grep -liwZ GUI | xargs -0 rm -f grep -rliwZ GUI / | xargs -0 rm -f Обе вышеприведенные команды удалят все файлы, содержащие в своем имени комбинацию символов "GUI". (Спасибо S.C.) |
Пример 12-5. Использование команды xargs для мониторинга системного журнала
Пример 12-6. copydir, копирование файлов из текущего каталога в другое место.
Пример 12-7. Завершение работы процесса по его имени
Пример 12-8. Подсчет частоты встречаемости слов using xargs
Универсальный обработчик выражений: вычисляет заданное выражение (аргументы должны отделяться пробелами). Выражения могут быть арифметическими, логическими или строковыми.
возвратит 8
возвратит 2
возвратит 15
В арифметических выражениях, оператор умножения обязательно должен экранироваться обратным слэшем.
Операция инкремента переменной, то же самое, что и let y=y+1, или y=$(($y+1)). Пример подстановки арифметических выражений.
Извлекает подстроку длиной $length символов, начиная с позиции $position.
Пример 12-9. Пример работы с expr
![]() |
Вместо оператора match можно использовать оператор :. Например, команда b=`expr $a : [0-9]*` является точным эквивалентом для b=`expr match $a [0-9]*` в примере, рассмотренном выше.
|
Этот пример демонстрирует необходимость экранирования оператора группировки — \( ... \) в регулярных выражениях, при поиске по шаблону командой expr.
Perl, sed и awk имеют в своем распоряжении более мощный аппарат анализа строк. Коротенький скрипт на sed или awk, внутри сценария (см. Section 33.2) — значительно более привлекательная альтернатива использованию expr при анализе строк.
Дополнительные примеры, по обработке строк, вы найдете в Section 9.2.
Последние комментарии