在特定目录中查找文件

时间:2017-12-20 17:50:57

标签: linux bash shell

我正在使用当前的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

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

1 个答案:

答案 0 :(得分: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需要在谓词列表之前的目录列表。)