我有一个包含多个文件的目录。这些文件来自网络位置;源是通过scp
命令发送这些文件。我有一个批处理命令,将为每个传入的文件运行;这个命令运行大约5-6个小时。
我试图通过linux box
运行命令find Documents/wget/ -maxdepth 1 -type f -exec btaudip '{}' \;
我的目标是同时启动目录中所有文件的批处理程序。但是,上面的命令一次只运行一个文件。所以,为此我改变了这个命令,如下所示。但它失败了。
find Documents/wget/ -maxdepth 1 -type f -exec btaudip '{}' & \;
我应该如何更改我的命令?
答案 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