Linux find: Объединение с другими командами

Объединение 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 другой команде. Её применение будет рассмотрено в другом примере.

Что будем искать? Например,программа