Örneğin TREE.wav, ONE.WAV var. Bunu tree.wav, one.wav olarak yeniden adlandırmak istiyorum. Tüm dosyaları küçük harfe nasıl yeniden adlandırırım?
Örneğin TREE.wav, ONE.WAV var. Bunu tree.wav, one.wav olarak yeniden adlandırmak istiyorum. Tüm dosyaları küçük harfe nasıl yeniden adlandırırım?
Yanıtlar:
Terminalden memnunsanız:
cd
dosyasını açın, yeniden adlandırılacak dosyaları içeren Klasörü yazın ve ardından pencereye sürükleyip bırakın.ls
ve enter tuşuna basın.Bu kodu yapıştırın ve enter tuşuna basın:
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
ls
ve tekrar enter tuşuna basın.(Birkaç düzeltme için Twitter'da @bavarious'a ve bunu büyük / küçük harfe duyarlı olmayan dosya sistemlerinde daha güvenli hale getirdiği için aşağıdaki John Whitley'e teşekkürler.)
foo.txt
ve FOO.TXT
bu onlardan biri clobber başladı.
mv "$f" "${f,,}"
veyadeclare -l g=$f; mv "$f" "$g"
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
Sorulduğu soru geneldir ve aynı zamanda önemlidir, bu nedenle daha genel bir cevap vermek istiyorum:
En basit durum (çoğu zaman güvenlidir ve Mac OS X'te, ancak okumaya devam edin):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Dosya adlarındaki (herhangi bir işletim sistemi) boşlukları da işlemeniz gerekir:
IFS=$'\n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Yalnızca büyük / küçük harfe duyarlı bir dosya sisteminde farklılık gösteren dosya adlarını güvenli bir şekilde işlemeniz ve hedefin üzerine yazmamanız gerekir (örneğin Linux):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done
Mac OS X hakkında not:
Mac'in dosya sistemi büyük / küçük harfe duyarlı değildir, büyük / küçük harfe duyarlıdır.
Bununla birlikte, kabul edilen cevap ve yorumlarda önerildiği gibi geçici dosyalar yaratmaya gerek yoktur, çünkü yalnızca duruma göre farklılık gösteren iki dosya adı ilk etapta var olamaz, ref .
Bunu göstermek için:
$ mkdir test
$ cd test
$ touch X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 X
$ mv X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 x