Linux единственная команда поиска в тысячах каталогов

Мне нужно найти около 7000 каталогов и определить количество файлов PDF, измененных в прошлом месяце, сгруппированных по типу PDF, который находится в базе данных MySQL. Структура папок...

/folder/to/FORMID/*.pdf
/folder/to/FORMID/*.pdf
/folder/to/FORMID/*.pdf
/folder/to/FORMID/*.pdf

В настоящее время я бегу...

find "/folder/to/FORMID/" "/folder/to/FORMID/" "/folder/to/FORMID/"  -name '*.pdf' -mtime +31 -mtime -51 | wc -l

кроме как до 4000 каталогов в качестве параметров. Это не возвращает то, что я знаю, чтобы быть точными результатами.

Это самый эффективный способ сделать это, или я могу использовать другую команду Linux?

3 ответа

Если у вас есть файл, содержащий имена каталогов для поиска, вы можете сделать эту комбинацию shell/find:

for i in `cat LIST_OF_DIR_NAMES.TXT`; do find ${i} -mtime +31 -mtime -51 -name '*.pdf' ; done | wc -l

Это запустит find для каждого каталога в LIST_OF_DIR_NAMES.TXT и выдаст вам общее количество найденных файлов.

Find должен работать соответствующим образом. Поскольку команда выполняется, я предполагаю, что это не слишком большая / слишком длинная ошибка аргументов. Дайте это, это может быть ошибка в find, Есть много вариантов, которые могут разумно обойти это. Вот два:

  • Сценарии вместо использования поиска напрямую
  • С помощью args -n $NUM проверять каталоги $NUM за прогон find

    каталог каталогов | xargs -n 30 -IX find X -mtime +31 -mtime -51 -name '*.pdf'

Я предполагаю, что у вас есть много подкаталогов, которые вы не собираетесь читать, следовательно, не указывается ни один каталог более высокого уровня.

Если вы хотите, чтобы PDF-файлы изменялись в течение последних 30 дней, разве вы бы не сделали что-то вроде этого:

 find dir1 dir2 ... dirn -name '*.pdf' -mtime -31 -print
Другие вопросы по тегам