在特定目录中查找文件

问题描述 投票:0回答:1

我正在使用这个当前的find命令:

find . -name "313958000002101817.pdf"

我目前在一个看起来类似于此的目录中:

/n01/data/adf/fp08_traffic/jobs/FB

在这个目录中,我有ID,所以我的目录结构看起来类似于:

/n01/data/adf/fp08_traffic/jobs/FB/1234
/n01/data/adf/fp08_traffic/jobs/FB/1235
/n01/data/adf/fp08_traffic/jobs/FB/1236

我知道我要找的PDF都在这个工作目录中:

/n01/data/adf/fp08_traffic/jobs/FB/"ID"/PDFs

有没有办法在字符串中间为作业目录抛出通配符?

linux bash shell
1个回答
4
投票

如果每个作业目录的数量不是很大,以至于它不适合命令行,那么这很简单:

find /n01/data/adf/fp08_traffic/jobs/FB/*/PDFs -name "313958000002101817.pdf" -print

我们在这里做的是指示shell将作业目录列表传递给find。但是,这不会超过一点。假设你正在处理一个更大的集...

find /n01/data/adf/fp08_traffic/jobs/FB -mindepth 2 -maxdepth 2 -type d -name PDFs \
  -exec sh -c 'exec find "$@" -name "313958000002101817.pdf" -print' _ {} +

第一个find生成一个PDFs目录列表。然后-exec sh -c '...' _ {} +在shell的参数列表中传递这些目录名称(尽可能多地为每个shell调用以提高效率),然后将它们传递到每个批次的新find命令的适当位置。 (shell是必需的,因为-exec ... {} +只允许在参数列表的末尾进行替换,而不是在任何先前的位置,而find需要在谓词列表之前的目录列表)。

© www.soinside.com 2019 - 2024. All rights reserved.