我有一个包含多个文件的目录。这些文件是通过网络位置来的;源通过scp命令发送这些文件。我有一个批处理命令,它将对每个传入文件运行;该命令运行大约5-6小时。
我试图在linux框中运行以下命令。
find Documents/wget/ -maxdepth 1 -type f -exec btaudip '{}' \;我的目标是同时启动目录中所有文件的批处理程序。但是,上面的命令一次只运行一个文件。因此,为此,我更改了下面的命令。但失败了。
find Documents/wget/ -maxdepth 1 -type f -exec btaudip '{}' & \;我该如何改变我的命令呢?
发布于 2015-04-02 12:07:12
事实上,find在-exec选项之后收集所有参数,直到第一个分号,然后运行(exec)结果命令,而不将它们传递给shell。修改后,find生成的最终命令如下:
btaudip FNAME '&'因此,每次运行时,btaudip都传递两个参数:当前文件名(由find找到)和一个符号。
要实现您想要的结果,您需要调用一个shell来正确地处理'&‘,例如使用以下命令:
find Documents/wget/ -maxdepth 1 -type f -exec bash -c "btaudip '{}' &" \;发布于 2015-04-01 10:02:17
我不认为find有这样的作业控制;它不是shell,虽然它能够生成shell,但shell将按顺序运行。因此,在这些shell中异步运行的命令将按顺序运行。
相反,您可以将其重写为shell循环:
for f in *; do [ -f "$f" ] || continue; btaudip "$f" & done发布于 2021-06-18 09:33:41
使用上述建议和即兴创作,我制作了一个脚本文件来转换文件夹中的所有PDF文件,并移到相应的文件夹中。
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您可以通过在文件夹中打开终端并使用以下命令创建此文件
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中运行
https://stackoverflow.com/questions/29387526
复制相似问题