我必须搜索大约 7,000 个目录,并确定上个月按 PDF 类型分组修改的 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
除了最多 4,000 个目录作为参数。这并没有返回我所知道的准确结果。
这是最有效的方法吗?或者我可以使用其他 Linux 命令吗?
答案1
如果您有一个包含要搜索的目录名称的文件,您可以执行以下 shell/find 组合:
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 中的每个目录上运行查找,并提供找到的总文件数。
答案2
Find 应该可以正常工作。由于命令正在运行,我假设这不是参数过多/过长的错误。鉴于此,这可能是 中的一个错误find
。有很多选项可以合理地解决这个问题。以下是两个:
- 编写脚本而不是直接使用 find
args -n $NUM
每次运行检查 $NUM 个目录find
cat directory_list | xargs -n 30 -IX find X -mtime +31 -mtime -51 -name '*.pdf'
我假设您有许多不想读取的子目录,因此没有指定单个更高级别的目录。
答案3
如果您希望在过去 30 天内修改 PDF,您可以这样做:
find dir1 dir2 ... dirn -name '*.pdf' -mtime -31 -print