Объединение find с другими командами
Команда find может эффективно обрабатывать результаты поиска, комбинируясь с другими shell-командами. Рассмотрим пример поиска файлов с расширением .txt в текущем каталоге (создайте несколько таких файлов, если необходимо).
Для поиска файлов, содержащих «txt» в имени, используем:
find . -name "*txt" -exec {} ;
Эта команда выведет содержимое всех найденных файлов .txt. Разберем её структуру:
- find .: поиск в текущем каталоге (.).
- -name "*txt": поиск файлов с именем, содержащим «txt».
- -exec {} ;: выполняет команду для каждого найденного файла. {} заменяется путем к файлу, а ; завершает команду -exec.
Подробный разбор команды -exec
Рассмотрим команду:
find . -name "*txt" -exec cut -d "" -f 1 {} ;
- .: путь к каталогу.
- -name "*txt": критерий поиска файлов с расширением txt.
- -exec: выполняет указанную команду для каждого найденного файла.
- cut: команда, которая будет выполняться.
- {}: заполнитель, заменяемый путем к файлу.
- ;: завершает команду -exec.
cut выполняется для каждого файла, найденного командой find. Фигурные скобки {} заменяются путем к соответствующему файлу. Обратите внимание на обратный слеш перед точкой с запятой (;). Это необходимо, так как точка с запятой – системный символ.
Структура аргументов для -exec: команда, {}, ;. Вместо cut можно использовать любую другую команду.
Использование ls
Вместо cut, можно использовать ls:
find . -name "*txt" -exec ls -la {} ;
Эта команда выведет информацию о каждом файле (права доступа, пользователь, группа и т.д.). Добавление опций, например -la или —color, изменит вывод ls. Опции -la и —color применяются к команде ls, а не к find или -exec.
Пример с цветным выводом:
find . -exec ls -la --color=auto {} ;
Форматирование результатов с помощью printf
Для вывода только размера файлов, можно использовать printf:
find . -printf "%p %k килобайт\n"
-printf выводит путь к файлу (%p) и его размер в килобайтах (%k), добавляя «килобайт» и перевод строки (\n).
xargs – альтернативный способ обработки результатов find
Команда xargs является альтернативой -exec для передачи результатов find другой команде. Её применение будет рассмотрено в другом примере.