![如何在终端中对每个文件夹中的文件执行批处理命令](https://linux22.com/image/1481036/%E5%A6%82%E4%BD%95%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%AD%E5%AF%B9%E6%AF%8F%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E6%89%A7%E8%A1%8C%E6%89%B9%E5%A4%84%E7%90%86%E5%91%BD%E4%BB%A4.png)
我有一个文件夹,里面包含一些文件夹。每个文件夹中都有一些bmp
文件。我想进入每个目录,将bmp
图像转换为pgm
格式并删除原始bmp
文件,然后对下一个目录重复此操作。
例如文件夹是
.
..
folder-a
folder-b
我想要使用的命令是:
~/folder-a$ mogrify -format pgm *.bmp && rm *bmp
是否可以使用单个命令来执行此操作,例如将ls
结果通过管道传输到mogrify
命令中?而不用费心使用 shell 脚本?
答案1
find . -name "*.bmp" -exec mogrify -format pmg {} \; -exec rm {} \;
应从顶层文件夹执行此操作。仅当第一个命令成功时,才会执行第二个命令。
如果您想执行这两个命令,即使第一个命令没有成功,您也必须:
find . -name "*.bmp" \( -exec mogrify -format pmg {} \; -o -exec true \; \) -exec rm {} \;
答案2
这应该可行。
for f in `ls`; do
cd $f
mogrify -format pmg *.bmp && rm *bmp
cd ..
done
或者用一行代码:
for f in `ls`; do cd $f; mogrify -format pmg *.bmp && rm *bmp; cd ..; done