У меня есть папка, которая содержит несколько папок внутри. В каждой папке есть несколько файлов bmp . Я хочу зайти в каждый каталог, конвертировать изображения bmp в формат pgm , удалить оригинальные файлы bmp и повторить для следующего каталога.

например, папки

.
..
folder-a
folder-b

И команда, которую я хочу использовать:

~/folder-a$ mogrify -format pgm *.bmp && rm *bmp

Можно ли сделать это с помощью одной команды, например, piping ls result в команды mogrify ? и не заморачиваться с сценарием оболочки?

2 ответа2

4

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .