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