Uzantıyı kaldırarak birden fazla dosyayı nasıl yeniden adlandırabilirim?


14

Adlı tiff dosyaları bir dizi var:

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

ve .tifher bir dosyanın sonundaki kaldırmak istiyorum . Bunu renameyapmak için komutu nasıl kullanabilirim ?


2
NO linux veya unix dosya sisteminin Windows veya VMS tarzı "uzantılar" kullandığını unutmayın - yalnızca dosya adının bir sonekinin ".tif" veya ".c" veya ".o" veya "olduğunu kabul edin. " ya da her neyse.
Bruce Ediger

Sorun değil ... Dosyaları windows'dan linux'a aktarıyorum :)
Paul

1
Teknik olarak konuşursak, Windows da dosya uzantılarını kullanmaz, sadece Windows 95'in dosya yöneticisi, MS-DOS adlandırma düzeninden çıktıktan sonra dosya türünü belirlemek için dosya adının son karakterlerini kullanmaya devam etti ve kural bu yana kaldı.
RAKK

Yanıtlar:


24

perl's rename(tipik olarak Debian'da da denildiği yerde bulunur prename) veya bu türev ( renameDebian'daki paket):

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

util-linux rename(genellikle rename.ulDebian'da Red Hat'ta bulunur):

rename -- .tif '' *.tif

(bu bir adlandırmak olacağını not blah.tiffany.tifetmek blahfany.tif)


2
Ben "Debian" yeniden adlandırma Larry Wall (Perl ile geliyor) ve "Red Hat" biri util-linux (Debian IIRC rename.ul) olduğunu düşünüyorum.
XTL

@XTL: Doğru. Ben sadece onları Debian veya Red Hat türevlerinde bulunan "yeniden adlandır" programları oldukları için söylüyorum.
Ignacio Vazquez-Abrams

Çok teşekkürler! 'Yeniden adlandırma'nın farklı versiyonları olduğunu hiç fark etmedim. Debian & redhat komutları arasında başka ince farklar olduğunu varsayalım. Bazı farklılıklarını aramam gerekecek.
Paul

İkinci komut geçersiz sözdizimi ile sonuçlandı, ancak ilk komut çalıştı.
HelloWorld

6

Yeniden adlandırılmamış için şunları yapabilirsiniz:

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

(-i bir dosyayı değiştirmeye karşı uyarmak için)


15
Daha hızlı daha hızlı sürüm:for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
jw013 20:12

Burada son yorumda +1. Boş alanlı dosya adlarında daha güvenlidir.
petobenler

1
@ jw013 yorumunuz en üst düzey bir yanıt olmalıdır.
Roland

1
rename -- .oldext .newext *.oldext

Bu, eski uzantıyı yenisiyle değiştirir. Uzantıyı kaldırmak için boş bir dizeyi bağımsız değişken olarak açıkça geçirebilirsiniz.

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

Yukarıdaki komutla .gz.tmp, geçerli klasördeki uzantıya sahip tüm dosyalar yeniden adlandırılacaktır filename.gz.

Ayrıntılar için Linux: birden çok dosya için dosya uzantılarını kaldırma makalesine bakın .


1
Bu, util-linux uygulamasının renamegeleneksel renamekomuta ile uyumsuz (ve çok daha sınırlı) olduğunu varsayar perl.
Stéphane Chazelas

Ayrıca , dosya adının ilk oluşumunun .oldext, uzantı (zorunlu foo.oldextasy.oldextolarak yeniden adlandırılamaz footasy.oldext) yerine değiştirileceğini de unutmayın .
Stéphane Chazelas

1

IBM AIX kullanıyorsanız bir renamekomutunuz olmaz, bu nedenle dosya uzantılarını toplu olarak kaldırmak için düz vanilya System V UNIX komutlarını kullanmanız gerekir:

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

-2

bunu tekrarlamalı yapabilir miyiz

for i in *.gz; do mv -i $i `basename $i .gz`; done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.