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_file
Geçerli dizindeki her dosya a_file
iç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:]
tr
komut 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 ls
kullanı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 -v
seçeneği güncellendi .mv
Daha zarif ve genel bir yardımcı program var prename
.
Larry Wall tarafından yazılmıştır, bu perl
yü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.
find
find . -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.
mv
ne 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