在find命令中使用-exec和&符号的含义是什么?Bash相关。

17

我想要跑步:

./my_script.py a_file &

我希望对当前文件夹中以.my_format结尾的所有文件执行操作,因此我执行以下操作:

find . -type f -name "*.my_format" -exec ./my_script {} & \;

但它不起作用。我应该如何在-exec参数中包含 & 符号?


一年后指出这个问题还有意义吗? - Ricky Robinson
1
我在遇到这个问题时看到了这个问题,这绝对不是一个坏问题。此时提到它是重复的只是为了通知未来的读者有其他答案可用,仅此而已。 - Eran
最终,只有类似问题的这个答案对我有所帮助。 - RAM237
2个回答

18

试一下这个:

$ find . -type f -name "*.my_format" -exec sh -c './my_script {} &' \;

你的尝试失败的主要原因可能是find使用标准C库函数族中的exec(3)之一执行命令,这些函数不支持作业控制——即amp;符号。Shell理解“在后台运行此命令”的含义,因此需要使用-exec sh ...调用。

哦,好的,谢谢。所以sh是所有Linux机器上的基本shell,对吗? - Ricky Robinson
最近的Linux发行版将/bin/sh符号链接到一个符合POSIX-sh标准的Shell。 - holygeek
如果我们为每个执行生成一个新的 shell,为什么还需要将执行的命令添加到后台? - Marinos An
Shell会一个接一个地执行。将其放在后台会导致shell脚本并行运行(最多同时处理与CPU相同数量的任务)。 - holygeek
这个可行,但请小心处理。如果您在遍历时遇到了大量的文件,请注意您的系统可能会死锁。 - orodbhen

5
尝试使用以下find命令:
find . -type f -name "*.my_format" -exec bash -c './my_script "$1" &' - '{}' \;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接