如何查找和执行目录中每个文件的命令?

时间:2015-04-01 09:45:08

标签: linux

我有一个包含多个文件的目录。这些文件来自网络位置;源是通过scp命令发送这些文件。我有一个批处理命令,将为每个传入的文件运行;这个命令运行大约5-6个小时。

我试图通过linux box

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

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

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

我应该如何更改我的命令?

3 个答案:

答案 0 :(得分:2)

事实是find-exec选项之后的所有参数收集到第一个分号,然后运行( exec )结果命令,而不将它们传递给贝壳。 通过修改,find生成的最终命令类似于:

btaudip FNAME '&'

因此,在每次运行btaudip时都会传递两个参数:当前文件名(由find找到)和&符号。

要实现您想要的效果,您需要调用shell来处理'&'正确地,例如通过使用以下命令:

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

答案 1 :(得分:0)

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

相反,您可以将其重写为shell循环:

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

答案 2 :(得分:0)

使用上述建议和即兴创作,我制作了一个脚本文件来转换文件夹中的所有 PDF 文件并移动到相应的文件夹

将PDF转JPG.sh

#!/bin/bash
sudo apt-get install poppler-utils
mkdir ConvertedJPG
for f in * 
do 
echo "converting" $f
pdftoppm -jpeg -rx 300 -ry 300 "$f" JPG
echo "moving converted JPG to " $f "\n"
mkdir "./ConvertedJPG/$f"
mv *.jpg "./ConvertedJPG/$f/"
done

您可以通过在文件夹中打开终端并使用这些命令来创建此文件

touch ConvertPDFtoJPG.sh
chmod ./ConvertPDFtoJPG.sh +x
gedit ./ConvertPDFtoJPG.sh

在文本编辑器中粘贴代码

#!/bin/bash
sudo apt-get install poppler-utils
mkdir ConvertedJPG
for f in * 
do 
echo "converting" $f
pdftoppm -jpeg -rx 300 -ry 300 "$f" JPG
echo "moving converted JPG to " $f "\n"
mkdir "./ConvertedJPG/$f"
mv *.jpg "./ConvertedJPG/$f/"
done

关闭编辑器

在终端运行 ./ConvertPDFtoJPG.sh