bash:-find命令中的exec和&;
我想跑:bash:-find命令中的exec和&;,bash,find,Bash,Find,我想跑: ./my_script.py a_file & 。。。在当前文件夹中以.my_format结尾的所有文件上,我执行以下操作: find . -type f -name "*.my_format" -exec ./my_script {} & \; 但它不起作用。我应该如何在-exec参数中包含&?尝试以下查找命令: find . -type f -name "*.my_format" -exec bash -c './my_script "$1" &' -
./my_script.py a_file &
。。。在当前文件夹中以.my_format
结尾的所有文件上,我执行以下操作:
find . -type f -name "*.my_format" -exec ./my_script {} & \;
但它不起作用。我应该如何在-exec
参数中包含&
?尝试以下查找命令:
find . -type f -name "*.my_format" -exec bash -c './my_script "$1" &' - '{}' \;
试试这个:
$ find . -type f -name "*.my_format" -exec sh -c './my_script {} &' \;
您的尝试不起作用的最可能原因是find使用标准c库调用的
exec(3)
系列之一执行命令,该系列调用不理解作业控制-符号&
。shell确实理解“在后台运行此命令”,因此调用了-exec sh…
哦,好的,谢谢。所以sh
是所有linux机器上的基本shell,对吗?最近的linux发行版将/bin/sh符号链接到符合posix sh的shell。如果我们为每次执行生成一个新的shell,为什么还要在后台添加已执行的命令?shell会一个接一个地执行。把它放在后台有一个并行运行的shell脚本的副作用(CPU一次可以处理的数量)。如果在你递归的树中有很多文件,你的系统可能会被锁定。一年后指出这一点有意义吗?我是在面对这个问题时提出这个问题的,这绝对不是一个坏问题。在这一点上,提到它是一个副本是一种通知未来读者其他答案可用的方式,仅此而已。最后,只有类似的问题对我有所帮助。