Используйте опцию find и exec.
$ find /path/to/dir -exec <command here> \;
Каждый файл или каталог может быть получен с помощью {}
.
Пример использования: $ find . -exec echo {} \;
, это будет эхо каждого имени файла рекурсивно или имя каталога в текущем каталоге. Вы можете использовать некоторые другие параметры, чтобы дополнительно указать нужные файлы и каталоги, которые вы хотите обработать. Я кратко объясню некоторые из них. Обратите внимание, что эхо избыточно, потому что вывод find будет автоматически распечатываться, но я оставлю его там, чтобы проиллюстрировать работу exec. Это, как говорится, следующие команды дают одинаковый результат: $ find . -exec echo {} \;
и $ find .
maxdepth и mindepth Указание maxdepth и mindepth позволяет идти так глубоко вниз по структуре каталогов, как вам нравится. Maxdepth определяет, сколько раз find
войдет в каталог, а mindepth определяет, сколько раз нужно вводить каталог перед выбором файла или каталога.
Примеры использования: (1) всего лишь элементов из этого списка, включая. (= текущий каталог). (2) перечисление только элементов из текущего каталога. (3) перечислив элементы из корневого каталога и все каталоги в этой директории
(1)$ find . -maxdepth 1 -exec echo {} \;
(2)$ find . -mindepth 1 -maxdepth 1 -exec echo {} \;
# or, alternatively
(2)$ find . ! -path . -maxdepth 1 -exec echo {} \;
(3)$ find/-maxdepth 2 -exec echo {} \;
типа Задание опции типа позволяет фильтровать файлы или только каталоги, пример использования: (1) список всех файлов в этот dir (2) вызовите сценарий оболочки funtion func
на каждую директорию в корневом каталоге.
(1)$ find . -maxdepth 1 -type f -exec echo {} \;
(2)$ find/-maxdepth 1 -type d -exec func {} \;
имя & регулярного выражения Опция Названия позволяет искать конкретные имена файлов, вы можете также искать файлы и директории с помощью регулярных выражений формата.
Пример использования: найти все фильмы в определенной директории
$ find /path/to/dir -maxdepth 1 -regextype sed -regex ".*\.\(avi\|mp4\|mkv\)"
размер Другой фильтр размер файла, любой файл или реж больше, чем это значение будет возвращено. Пример использования: (1) найти все пустые файлы в текущем каталоге. (2) найти все непустые файлы в текущем каталоге.
(1)$ find . -maxdepth 1 -type f -size 0
(2)$ find . -maxdepth 1 -type f ! -size 0
Другие примеры Переместить все файлы текущей директории в директорию tmp
, присутствующего в .
$ find . -type f -maxdepth 1 -exec mv {} tmp \;
Преобразовать все MKV файлы в MP4 файлы в дир/путь/к/реж и ребенка справочники
$ find /path/to/dir -maxdepth 2 -regextype sed -regex ".*\.mkv" -exec ffmpeg -i {} -o {}.mp4 \;
Конвертировать все ваши файлы jpeg в png (не делайте этого, это займет очень долго, чтобы найти их и преобразовать их).
$ find ~ -maxdepth 420 -regextype sed -regex '.*\.jpeg' -exec mogrify -format png {} \;
Примечание find
команда является мощным инструментом, и это может оказаться плодотворным для труб выход в xargs
. Важно отметить, что этот метод превосходит следующую конструкцию:
for file in $(ls)
do
some commands
done,
как последний будет обрабатывать файлы и каталоги, содержащие пробелы неправильный путь.
Как бы преобразовать это, чтобы каталог указывался как аргумент вместо hardcoded? Достаточно ли заменить знак доллара? –