是否有可能得到“查找-exec”扩展反引号find每个文件?

这是一个正常工作的命令:

echo Blah: `stat -c %a .` 

是否有可能find -exec为每个find的文件执行同样的事情,用{}代替.

最好的方法是使用位置参数。 并且$()是命令replace的首选 ,因为它更具可读性(不会与单引号混淆),并且可以轻松嵌套,而不必进行大量转义。

 find . -exec bash -c 'echo Blah: $(stat -c %a "$@")' _ {} \; 

下划线是$0的占位符。

做什么的?

 find ... -printf 'Blah: %m\n' 

或者使用bash -c如果你真的需要:

  find . -exec bash -c 'echo Blah: `stat -c %a {}`' \; 

使用它们的唯一方法(AFAIK)是将它们放在一个bash脚本文件中,并在-exec中使用脚本。 同样的事情与$()

别忘了xargs ! 你的例子会为每个find的文件调用一个新的shell进程。

我宁愿这样做:

find ... | xargs stat -c "Blah: %a"

find输出的列表, xargs读取stdin上的参数列表,并在命令行上使用这些参数执行它的参数,尽可能长的build立命令行。 它的工作原理是, stat和大多数其他适当的命令/程序一样,可以使用任意数量的参数。 (比较lsrmecho

如果您觉得为每个文件启动一个新进程是绝对必要的,则使用xargs -n 1仅将1parameter passing给每个命令。 这样,你可以模仿这种效率低下的方法:

find ... | xargs -n 1 stat -c "Blah: %a"

(在慢速计算机上的大文件系统上试一试,并分析差异!)