Часто в терминале или shell-скрипте может потребоваться рекурсивный просмотр файлов в каталоге. В этой статье мы узнаем, как рекурсивно просматривать файлы в каталоге в Linux. Вы можете использовать эти шаги практически во всех оболочках Linux.
Рекурсивный перебор файлов в каталоге в Bash
Find - одна из лучших команд для поиска файлов, удовлетворяющих определенным критериям. Вот команда для поиска всех файлов в текущем рабочем каталоге.
1 | find . -type f -print0 |
В приведенной выше команде мы используем точку(.), чтобы указать, что мы хотим найти файлы в текущем рабочем каталоге. Вы можете указать другой каталог, если хотите искать в другой папке.
1 | find /home/data -type f -print0 |
Мы также используем -type f, чтобы указать, что мы хотим искать только файлы, а не папки.
Приведенная выше команда выведет список всех относительных путей к файлам. Мы используем вывод вышеприведенной команды в цикле for для перебора этих файлов и работы с ними. В следующем коде вы можете заполнить часть между do...done кодом для работы с файлами. Мы используем опцию -print0 для отображения всех имен файлов, даже если они включают пробелы и другие специальные символы. Если вы используете только опцию -print, она не будет работать с файлами, содержащими пробелы и специальные символы.
1 2 3 4 | for i in $(find . -type f -print0) do #код для выполнения задания для каждого файла done |
Если вы хотите найти файлы определенного типа, например, pdf, вы можете использовать опцию -name в команде find, как показано ниже. Для опции name можно указать форматы имен расширений файлов, используя символы подстановки.
1 2 3 4 | for i in $(find . -type f -print0 -name "*.pdf") do #код для выполнения задания над каждым файлом done |
Аналогично, вот пример для поиска файлов в форматах pdf и .doc в вашей папке.
1 2 3 4 | for i in $(find . -type f -print0 -name "*.pdf" or -name ".doc") do #код для выполнения задания для каждого файла done |
Вы можете выполнить приведенную выше команду непосредственно в терминале или добавить ее как часть сценария оболочки.