2013-08-25 11 views
8

Ben örneğin, bir '.1' sona dosyaların bir dizi var:Linux/Unix'te birden fazla dosyayı bir uzantıdan diğerine nasıl yeniden adlandırma?

example.file.ex1.1 
example.file.ex2.1 
example.file.ex3.1 

hızla sonunda' .1' olmadan hepsini yeniden adlandırmak bir yolu (örneğin örnek var mı .file.ex1, example.file.ex2, vs.)?

Teşekkürler!

+3

Bu soru o [Unix ve Linux] (http://unix.stackexchange.com/) –

+0

Bütün büyük yanıtları için daha uygundur çünkü konu dışı gibi görünüyor. Teşekkürler! – user2716340

+2

Denedim ama görünüşe göre yeterince "itibar" yok. =) – user2716340

cevap

5

Saf bash çözeltisi:

for curFile in example.file.*.1; do 
    mv -- "$curFile" "${curFile:0:-2}" 
done 
12

Evet, rename ile bu deneyin: testler geçerli olup olmadığını

rename -n 's/\.1$//' * 

-n (kuru çalışma modu anahtarını) çıkarın.

warning http://pix.toile-libre.org/upload/original/1377510865.pngveya bunu yapmak mümkün, bu yüzden dikkatli olabilir veya olmayabilir aynı isimde başka araçlar vardır.


aşağıdaki komutu (linux)

$ file $(readlink -f $(type -p rename)) 

çalıştırmak ve

.../rename: Perl script, ASCII text executable 

o zaman bu doğru araç gibi görünüyor = gibi bir sonuç varsa)

Yapmamak için Ubuntu gibi Debian varsayılan (genellikle zaten vaka) ve türev:

$ sudo update-alternatives --set rename /path/to/rename 
az değil

Son olarak, bu araç Larrt Wall, Perl baba tarafından yazılmıştır.

+0

Varsayılan olarak "yeniden adlandır" ın neden Ubuntu veya Debian üzerinde çalışmadığını açıklar mısınız? '/ Usr/bin/rename -n'/.1 // '*' 'gibi çalışıyor gibi çalışıyor. Sadece anlamıyorum, her ikisi de perl ifadelerine izin veriyor ama bir eseri ve diğeri çalışmıyor. Fark ne? –

+0

Varsayılan yeniden adlandırma Ubuntu/Debian –

+0

üzerinde çalışır. Haklısın. Benim kötü –

3

Başka parameter expansion kullanılarak çözüm:

for curFile in example.file.*.1; do 
    mv "$curFile" "${curFile%.1}" 
done 
+0

Teşekkürler! Çalışır: f = dosya.zip; echo $ {f% .zip} # -> dosya –

İlgili konular