我正在使用这个当前的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
有没有办法在字符串中间为作业目录抛出通配符?
如果每个作业目录的数量不是很大,以至于它不适合命令行,那么这很简单:
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
需要在谓词列表之前的目录列表)。