如何在终端中对每个文件夹中的文件执行批处理命令

如何在终端中对每个文件夹中的文件执行批处理命令

我有一个文件夹,里面包含一些文件夹。每个文件夹中都有一些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

相关内容