2015-04-01 91 views
0

我有一个包含多个文件的目录。这些文件通过网络位置传送;源通过scp命令发送这些文件。我有一个批处理命令将运行这些传入的文件中的每一个;该命令运行约5-6个小时。如何查找并执行目录中每个文件的命令?

我想下面的命令由Linux机器上运行

find Documents/wget/ -maxdepth 1 -type f -exec btaudip '{}' \; 

我的目标是启动批​​处理程序中同时目录中的所有文件。但是,上述命令一次只能运行一个文件。所以,为此,我改变了这个命令如下。但失败了。

find Documents/wget/ -maxdepth 1 -type f -exec btaudip '{}' & \; 

我该如何改变我的命令呢?

回答

1

事实是,find收集所有参数的-exec选项到第一个分号后,然后运行(EXEC)得到的命令,而不会将它们传递给壳体。 有了您的修改,通过find产生最后的命令是一样的东西:

btaudip FNAME '&' 

因此在每次运行btaudip传递两个参数:当前文件名(如发现find)和符号。

达到你想要什么,你需要通过使用以下命令“&”正确地调用一个shell来处理,例如:

find Documents/wget/ -maxdepth 1 -type f -exec bash -c "btaudip '{}' &" \; 
0

我不认为find有这种工作控制;它不是一个外壳,虽然它能够产生炮弹,但外壳会依次运行。结果,这些shell中异步运行的命令将按顺序运行。

相反,你可以重写这个作为外壳循环:

for f in *; do [ -f "$f" ] || continue; btaudip "$f" & done 
相关问题