Linux 数千个目录中的单个 find 命令

Linux 数千个目录中的单个 find 命令

我必须搜索大约 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

相关内容