Tüm dosyaları küçük harfe nasıl yeniden adlandırırım?


123

Ö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?


1
Terminal / kabuk çözümünden memnun musunuz? Yoksa C / Objective-C kodunun bunu başarmasını mı istiyorsunuz?

Terminal çözüm iyi olacak.
Voloda2

3
Bunun yeniden açılması gerektiğini düşünüyorum. terminal kodu da koddur
Danield

1
Bu, stackoverflow'da geçerli bir soru olmalıdır. Bu aynı zamanda koddur.
adev

Yanıtlar:


371

Terminalden memnunsanız:

  1. Terminal.app 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.
  2. Doğru dizinde olduğunuzu onaylamak için yazın lsve enter tuşuna basın.
  3. 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
  4. Tüm dosyalarınızın küçük harfli olduğunu onaylamak için yazın lsve 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.)


9
Dikkatli ol. Adlandırılmış dosyaları varsa foo.txtve FOO.TXTbu onlardan biri clobber başladı.
Keith Thompson

1
Bash ile şunları yapabilirsiniz:, mv "$f" "${f,,}"veyadeclare -l g=$f; mv "$f" "$g"
glenn jackman

2
tüm bu komutları denedim, "mv: 'PPP.txt' ve 'ppp.txt' aynı dosyadır" ve dosyamın küçük harfleri yok ... herhangi bir fikir? Aynı dizinde olduğu için mi?
lorless

1
user2066039: Bu, Mac'te yeni bir şey olmalı, çünkü bir yıldan daha eski çoğu yanıt bunu hesaba katmıyor. Görevi 'jpg1' gibi bir ara uzantı kullanarak tamamladım. Yani, JPG -> jpg1 -> jpg. Umarım yardımcı olur.
Joyce

14
OS X kullanıcıları, büyük / küçük harfe duyarlı olmayan dosya sistemi nedeniyle önce her dosyayı geçici bir adla yeniden adlandırmalıdır, örneğin: for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
John Whitley

10

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

Evet - ancak örneğiniz 'mv X x' kullanarak dosya adlarını küçük harfle yazabileceğinizi gösteriyor. Yani sadece yorum yaptığım şeydi.
cpaludan

mojave 10.14.5: # touch X x # ls -la toplam 0 -rw-r - r-- 1 kök kök 0 Haz 24 15:19 X # mv X x mv: 'X' ve 'x' aynı dosya # ls -la -rw-r - r-- 1 kök kök 0 Haz 24 15:19 X
cpaludan

Boktan biçimlendirme için özür dilerim. SO orada bana nazik davranmadı.
cpaludan

1
Ve benim hatam - ahudududa bir ortak sürücüde (hfsplus formatlı) bir ssh içindeydi - orada çalışmıyor. Ama yerel olarak Mac'imde öyle.
cpaludan

i in * için; do j = $ (tr '[: üst:]' '[: alt:]' <<< "$ i"); mv "$ i" "$ j"; benim için catalina'da çalıştı. Teşekkürler.
Sinan Eldem

2

Balık kabuğu versiyonu:

for old in *
    set new (echo $old | tr '[A-Z]' '[a-z]')
    mv $old $new
end
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.