Belli bir dizin içindeki dosya isimlerini yinelemeli (recursively) olarak büyük harften küçükharfe nasıl çevirebilirim?
Kod:
cd /dizin_ismi/
find . -name '*[A-Z]*' -type f -print0 | xargs -0 rename 'y/A-Z/a-z/'
Dosya isimleri ile birlikte, dizin isimlerinide büyük harften küçük harfe çevirmek isterseniz.
Kod:
cd /somewhere
find . -type d -depth -name '*[A-Z]*' -print |
while read dir; do dname="$(dirname $dir)"; bname="$(basename $dir)";
newbname="$(echo $bname | tr [:upper:] [:lower:])"; mv "$dir" "$dname/$newbname"; done
# Dizin isimlerini değiştirir.
# A to a until we've already renamed A/B to A/b.
Kod:
find . -name '*[A-Z]*' -type f -print0 | xargs -0 rename 'y/A-Z/a-z/'
Yukarıdaki betik bazı durumlarda kusurlu sonuçlar verebilir. Dizin isimlerinizin newline, _ veya whitespace karekterine sahip olduğu durumlar için başarısız olur. Betiği kullanma riski tamamıyle size aitdir, dilerseniz kullanmadan önce mv komutunun baş tarafına echo 'yu ekleyerek sonucu görerek değerlendirmeye çalışın.
Buna karşın aşağıdaki basit betik daha kararlı sonuç verebilir.
Kod:
find /somewhere -depth -name '*[A-Z]*' -print0 | xargs -r0 rename 'y/A-Z/a-z/'
Yine bu betiği sisteminizde uygulamadan önce rename komutunun başına echo'yu ilave ederek sonucu değerlendirmeye çalışınız. Kullanım riski size ait.