Dosyaları küçük harfle yeniden adlandırma


17

Bir dizindeki tüm dosyaları küçük harfli | büyük harf olarak yeniden adlandırmanın bir yolu var mı ?

Bir oneliner komutu arıyorum .

TotalCommander'ın sevdim alt+f7, şimdi Terminalde bu işlevselliğe ihtiyacım var

Yanıtlar:


20

a_fileGeçerli dizindeki her dosya a_fileiçin küçük harfle yeniden adlandırın .

for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;

Büyük harf için argümanları [:lower:] [:upper:]

trkomut başvuru bağlantısı

Güncelleme

Daha da fazla kontrol *ile değiştirilebilir ls.

Örneğin, yalnızca * .jpg dosyalarını filtrelemek için 1.txt, 2.txt, 3.txt, 1.jpg, 2.jpg ve 3.jpg içeren bir dizinde lskullanılabilir:

for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;

Yukarıdaki kod, a_file.jpg uzantılı tüm dosyaları değişkene atayacaktır .

Önerilen sds'ye göre komut ekleme -vseçeneği güncellendi .mv


4
mvne yapıldığını görmek için "-v" yi geçmek isteyebilirsiniz ; Eğer olabilir değil bu, mevcut dosyaları clobber çünkü "-f" geçmek istiyorum
sds

Bu, adlarında boşluk bulunan dosyalar için çalışmaz.
Tianxiang Xiong

Dosya adının çevresinde tırnak işaretleri kullanabilirsiniz.
Stef K

2
Üzgünüz, ama ls * jpg ile ilgili bölüm kötü bir fikir. mywiki.wooledge.org/ParsingLs Aynı sonucu * jpg ile ilk başta * bulunduğunuz yerde elde edebilirsiniz.
tink

16

Daha zarif ve genel bir yardımcı program var prename.

Larry Wall tarafından yazılmıştır, bu perlyüzden büyük olasılıkla sisteminizde zaten mevcut olarak gelir /usr/bin/prename(eğer kurulum alternatifleriniz varsa /usr/bin/rename/ etc / alternations üzerinden sembolik olarak da kullanılabilir prename)

Bunu kullanarak, herhangi bir perl ifadesi sağlayarak (ikame s///veya karakter çevirisi dahil ancak bunlarla sınırlı olmamak üzere) bir komutta birden fazla dosyayı yeniden adlandırabilirsiniz tr///:

Örnekler:

# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG

# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*

# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*

# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}'  *

Ve bunun gibi.

Prename ile ilgili bir diğer güzel şey, bir dosyayı mevcut bir dosya adına yeniden adlandırmanız durumunda sizi koruyabilmesidir.

man prename daha fazla ayrıntı için.


1

kullanma find

find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;

İçin find

  • Tabiki sonra -name deseninizi koyduktan .
  • -maxdepth 0: Yalnızca geçerli dizin.

İçin rename

  • -n, -nono: Eylem yok: Yeniden adlandırılacak dosyaların adlarını yazdırın, ancak yeniden adlandırmayın.
  • y/source/dest/: Model alanında kaynakta görünen karakterleri, hedefteki ilgili karaktere çevirin.
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.