У мене є ряд файлів tiff з назвою:
sw.001.tif
sw.002.tif
...
і я хочу видалити .tifкінець кожного з файлів. Як я можу використовувати renameкоманду для цього?
У мене є ряд файлів tiff з назвою:
sw.001.tif
sw.002.tif
...
і я хочу видалити .tifкінець кожного з файлів. Як я можу використовувати renameкоманду для цього?
Відповіді:
perl's 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)
Для неперейменування ви можете:
$ for i in *.tif; do mv -i $i `basename $i .tif`; done
(-і застерегти від заміни файлу)
for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
rename -- .oldext .newext *.oldext
Це замінює старе розширення новим. Щоб просто видалити розширення, ви можете явно передати порожній рядок як аргумент.
rename -- .gz.tmp '' *.gz.tmp
За допомогою наведеної вище команди всі файли з .gz.tmpрозширенням у поточній папці будуть перейменовані в filename.gz.
Докладні відомості див. У статті: Linux: видаліть розширення файлів для кількох файлів .
rename, несумісна з (і набагато більш обмеженою, ніж) традиційною renameкомандою perl.
.oldextв імені файлу, а не обов'язково розширення ( foo.oldextasy.oldextбуло б перейменовано на footasy.oldext).
чи можемо ми зробити це рекурсивним
for i in *.gz; do mv -i $i `basename $i .gz`; done