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

Какую версию Вы используете? Вы, возможно, были поражены этой ошибкой, если версия, которую Вы установили, слишком стара для включения ее патча.

13
20.03.2012, 03:04
6 ответов

perl rename (как обычно найдено на Debian, где это также называют prename), или эта производная (rename пакет на Debian):

rename 's/\.tif$//' *.tif

util-linux rename (как обычно найдено на Red Hat, rename.ul на Debian):

rename -- .tif '' *.tif

(обратите внимание, что тот переименовал бы blah.tiffany.tif кому: blahfany.tif)

23
27.01.2020, 19:52
  • 1
    я верю "Debian", переименовывает, Larry Wall (идет с Perl?) и "Red Hat" каждый от util-linux (rename.ul в Debian IIRC). –  XTL 20.03.2012, 16:19
  • 2
    @XTL: Верный. Я просто называю их этим, потому что они - "переименовать" программы, найденные в производных Debian или Red Hat. –  Ignacio Vazquez-Abrams 20.03.2012, 16:39
  • 3
    Большое спасибо! Я никогда не понимал, что были различные версии, 'переименовывают'. Я предполагаю, что существуют другие тонкие различия между командами в debian и Redhat. У меня будут к поиску некоторые их различия. –  Paul 20.03.2012, 16:45

Для непереименовывания Вы могли бы сделать:

$ for i in *.tif; do mv -i $i `basename $i .tif`; done

(-i для предупреждения от замены файла)

6
27.01.2020, 19:52
  • 1
    Более безопасная более быстрая версия: for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done –  jw013 20.03.2012, 16:13

Если вы используете IBM AIX, у вас не будет никакой команды RENAME , поэтому для того, чтобы пакет удалить расширения файлов, вам придется использовать обычную систему Vanilla System v Unix :

for file in *.tif; do
   mv $file `echo $file | sed 's/.tif$//'`;
done;
1
27.01.2020, 19:52
rename -- .oldext .newext *.oldext

Это заменяет старое расширение новым. Чтобы просто удалить расширение, вы можете явно передать пустую строку в качестве аргумента.

rename -- .gz.tmp  '' *.gz.tmp

С помощью указанной выше команды все файлы с расширением .gz.tmp в текущей папке будут переименованы в filename.gz .

См. Статью: Linux: удаление расширений файлов для нескольких файлов для получения дополнительных сведений.

1
27.01.2020, 19:52

можем ли мы сделать это рекурсивным

for i in *.gz; do mv -i $i `basename $i.gz`; done
-2
27.01.2020, 19:52
perl-rename 's/\.tif//' *.tif

Используйте -nдля пробного прогона.

1
03.09.2021, 17:06

Теги

Похожие вопросы