我有一个包含多个文件的目录。这些文件来自网络位置;源通过 scp
命令发送这些文件。我有一个批处理命令,可以为每个传入文件运行;此命令运行大约 5-6 小时。
我正在尝试通过 linux box 运行以下命令
find Documents/wget/ -maxdepth 1 -type f -exec btaudip '{}' \;
我的目标是同时为目录中的所有文件启动批处理程序。但是,上面的命令一次只能运行一个文件。所以,为此我改变了这个命令如下。但它失败了。
find Documents/wget/ -maxdepth 1 -type f -exec btaudip '{}' & \;
我应该如何为此更改我的命令?
最佳答案
事实上,find
收集了 -exec
选项之后的所有参数,直到第一个分号,然后运行 (exec) 结果命令,而不将它们传递给 shell。
通过您的修改,find
生成的最终命令类似于:
btaudip FNAME '&'
因此在每次运行 btaudip
时都会传递两个参数:当前文件名(由 find
找到)和一个符号。
要实现您想要的效果,您需要调用一个 shell 来正确处理“&”,例如使用以下命令:
find Documents/wget/ -maxdepth 1 -type f -exec bash -c "btaudip '{}' &" \;
关于bash - 对目录中的所有文件并行运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29387526/