Как удалить префиксы и суффиксы из имен файлов в заданном каталоге?

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

Так что foo bar XXX doo par.jpg , foo bar YY YY doo par.jpg станет XXX.jpg и YY YY.jpg

С именем:

Настроить:

 $ mkdir test && cd test $ > "foo bar XXX doo par.jpg"; > "foo bar YY YY doo par.jpg" 

Действие:

 $ rename -n 's/^foo bar //; s/ doo par(\.[^.]*)$/$1/' * foo bar XXX doo par.jpg renamed as XXX.jpg foo bar YY YY doo par.jpg renamed as YY YY.jpg 

(Удалите -n чтобы эти действия действительно выполнялись)

Если имя файла находится в переменной, канонический способ удалить префикс:

 removepre="foo bar " filename="foo bar XXX doo par.jpg" filename="${filename#"$removepre"}" echo "$filename" 

Проблема с суффиксом, который вы представляете, заключается в том, что есть расширение, которое вы хотите сохранить, поэтому оно становится немного длиннее:

 removesuf=" doo par" filename="foo bar XXX doo par.jpg" extension="${filename##*.}" ### store extension in a variable. filename="${filename%.*}" ### remove extension. filename="${filename%"$removesuf"}" ### remove suffix. filename="$filename.$extension" ### re-place the extension echo "$filename" 

Все в одном скрипте:

 #!/bin/bash filename="$1" removepre="foo bar " filename="${filename#"$removepre"}" removesuf=" doo par" extension="${filename##*.}" ### store extension in a variable. filename="${filename%.*}" ### remove extension. filename="${filename%"$removesuf"}" ### remove suffix. filename="$filename.$extension" ### re-place the extension echo "$filename" 

Вызовите сценарий следующим образом:

 $ ./script "foo bar XXX doo par.jpg" XXX.jpg" 

Поймите, что кавычки являются обязательными для обработки имен файлов с пробелами.