我正在使用当前的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
有没有办法在字符串中间为作业目录抛出通配符?
答案 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
需要在谓词列表之前的目录列表。)