bash - 对目录中的所有文件并行运行命令

标签 bash

我有一个包含多个文件的目录。这些文件来自网络位置;源通过 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/

相关文章:

bash - 获取 HDFS 中最后更新的文件

python - 如何仅重定向流的一部分?

linux - 从文件中查找定义的数据并用作变量

bash - 扩展变量 Bash 脚本

linux - startx 后自动运行脚本

linux - su下如何运行sudo?

bash - 在 shell 脚本中使用 read 命令逐行读取输入文件会跳过最后一行

linux - 如何编写一个带一个参数(目录名)的 bash shell 脚本

bash - 在 xargs 变量上使用 sed 在 shell 扩展中不起作用

linux bash终端功能不关闭命令