Мне нужно просмотреть около 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?
Найти должен работать соответствующим образом. Поскольку команда выполняется, я предполагаю, что это не ошибка слишком большого количества / слишком длинных аргументов. Давай, это может быть ошибка в find
. Есть много вариантов, которые могут разумно обойти это. Вот два:
С помощью args -n $NUM
для проверки каталогов $ NUM за запуск find
cat directory_list | xargs -n 30 -IX найти X -mtime +31 -mtime -51 -name '* .pdf'
Я предполагаю, что у вас есть много подкаталогов, которые вы не собираетесь читать, поэтому не указываю ни одного каталога более высокого уровня.
Если у вас есть файл, содержащий имена каталогов для поиска, вы можете использовать эту комбинацию оболочки / поиска:
for i in `cat LIST_OF_DIR_NAMES.TXT`; do find ${i} -mtime +31 -mtime -51 -name '*.pdf' ; done | wc -l
Это запустит поиск в каждом каталоге в LIST_OF_DIR_NAMES.TXT и даст вам общее количество найденных файлов.
Если вы хотите, чтобы PDF-файлы были изменены В ТЕЧЕНИЕ последних 30 дней, не могли бы вы сделать что-то вроде этого:
find dir1 dir2 ... dirn -name '*.pdf' -mtime -31 -print