Як перейменувати кілька файлів, видаливши розширення?


14

У мене є ряд файлів tiff з назвою:

sw.001.tif
sw.002.tif
...

і я хочу видалити .tifкінець кожного з файлів. Як я можу використовувати renameкоманду для цього?


2
Майте на увазі, що NO linux або unix файлова система не використовує «розширення» у стилі Windows або VMS - суфікс імені файлу є лише «умовно» або «.c» або «.o» або «.so "чи що завгодно.
Брюс Едігер

Це добре ... Імпортую файли з Windows на Linux :)
Пол

1
Технічно кажучи, Windows також не використовує розширення файлів, це просто те, що менеджер файлів Windows 95 продовжує використовувати останні символи імені файлу для визначення типу файлу після виходу зі схеми іменування MS-DOS і конвенція з тих пір залишається.
RAKK

Відповіді:


24

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)


2
Я вважаю, що перейменування "Debian" - це Ларрі Уолл (поставляється з Perl?), А "Червона Шапочка" - від util-linux (rename.ul в Debian IIRC).
XTL

@XTL: Правда. Я просто називаю їх, тому що вони "перейменують" програми, знайдені в похідних Debian або Red Hat.
Ігнасіо Васкес-Абрамс

Дуже дякую! Я ніколи не розумів, що існують різні версії "перейменувати". Я припускаю, що між командами в debian & redhat є й інші тонкі відмінності. Мені доведеться шукати деякі їх відмінності.
Пол

Друга команда призвела до недійсного синтаксису, але перша спрацювала.
HelloWorld

6

Для неперейменування ви можете:

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

(-і застерегти від заміни файлу)


15
Більш безпечна швидша версія:for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
jw013

+1 на останній коментар тут. Безпечніше для назви файлів із порожніми пробілами.
petobens

1
@ jw013 ваш коментар повинен відповісти вищого рівня.
Роланд

1
rename -- .oldext .newext *.oldext

Це замінює старе розширення новим. Щоб просто видалити розширення, ви можете явно передати порожній рядок як аргумент.

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

За допомогою наведеної вище команди всі файли з .gz.tmpрозширенням у поточній папці будуть перейменовані в filename.gz.

Докладні відомості див. У статті: Linux: видаліть розширення файлів для кількох файлів .


1
Це передбачає, що реалізація util-linux rename, несумісна з (і набагато більш обмеженою, ніж) традиційною renameкомандою perl.
Стефан Шазелас

Також зауважте, що він замінює перше виникнення .oldextв імені файлу, а не обов'язково розширення ( foo.oldextasy.oldextбуло б перейменовано на footasy.oldext).
Стефан Шазелас

1

Якщо ви використовуєте IBM AIX, ви не матимете renameкоманди, тому для пакетного видалення розширень файлів вам доведеться використовувати звичайні команди vanilla System V UNIX:

for file in *.tif; do
   mv $file `echo $file | sed 's/.tif$//'`;
done;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.