Ö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:
cddosyasını açın, yeniden adlandırılacak dosyaları içeren Klasörü yazın ve ardından pencereye sürükleyip bırakın.lsve 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:]"`"; donelsve 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.txtve FOO.TXTbu 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