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
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:
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
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.
findfind . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find-name deseninizi koyduktan .-maxdepth 0: Yalnızca geçerli dizin.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.
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