Find + xargs: поиск файлов в Linux

Список содержимого директорий, содержащих «kernel» в имени

Необходимо найти все директории, содержащие «kernel» в имени, и вывести список файлов и директорий внутри них. Можно использовать команду ls в комбинации с find.

Использование find с -exec

Сначала найдём все директории, содержащие «kernel», а затем выполним ls. Рассмотрим опцию -exec в команде find:

find / -name '*kernel*' -type d -exec ls -l --color {} ;
  • /: Абсолютный путь к корневой директории.
  • -name ‘*kernel*’: Поиск директорий, содержащих «kernel» в имени.
  • -type d: Поиск только директорий.
  • -exec ls -l —color {} ;: Выполнение ls -l —color для каждой найденной директории. {} заменяется на путь к директории, ; указывает конец команды -exec.

Вывод разделен на секции: каждая соответствует одной найденной директории.

Без -exec, команда find / -name ‘*kernel*’ -type d вернет список путей (например, ./etc/kernel, ./proc/kernel). Содержимое каждой директории можно посмотреть отдельно, выполнив ls -l для каждого пути.

Использование xargs

Используем оператор | (pipe) и команду xargs:

find / -name '*kernel*' -type d | xargs ls -l --color

Результаты find передаются в качестве аргументов ls через xargs. ls -l —color выполняется один раз для всех найденных директорий, и результат группируется. Вывод отличается от варианта с -exec: вывод для каждой директории не является отдельным блоком.

Рассмотрены два способа объединения find и ls. -exec в find выполняет ls для каждой директории отдельно, а xargs передает все результаты find команде ls единовременно, что может быть эффективнее. Выбор метода зависит от требований к выводу и производительности.

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