find . -depth -name '*[A-Z]*'|sed -n 's/\(.*\/\)\(.*\)/mv -n -v -T \1\2 \1\L\2/p'|sh
Burada belirtilen daha ayrıntılı komut dosyalarını denemedim, ancak tek komut satırı sürümlerinin hiçbiri Synology NAS'ımda benim için çalışmadı. rename
Mevcut ve varyasyonları birçok değildir find
o bulabilmesi halinde, örneğin zaten değiştirildi yolunun (eski adıyla sopa gibi görünüyor, çünkü başarısız ./FOO
ardından ./FOO/BAR
yeniden adlandırma, ./FOO
için ./foo
hala listeye devam edecektir./FOO/BAR
bu yol artık geçerli olmasa bile ) . Yukarıdaki komut benim için herhangi bir sorun olmadan çalıştı.
Aşağıda komutun her bir parçasının açıklaması yer almaktadır:
find . -depth -name '*[A-Z]*'
Bu, geçerli dizindeki herhangi bir dosyayı bulur (değiştir .
işlemek istediğiniz dizine ), önce derinlik aramasını kullanarak (örn., Daha ./foo/bar
önce listeleyecektir ./foo
), ancak yalnızca büyük harf karakter içeren dosyalar için bulur. -name
Filtre yalnızca ana dosya ismi değil, tam yol için de geçerlidir. Yani bu listeleyecek ./FOO/BAR
ama olmayacak ./FOO/bar
. Yeniden adlandırmak istemediğimiz için bu sorun değil ./FOO/bar
. Yine de yeniden adlandırmak istiyoruz ./FOO
, ancak daha sonra listeleniyor (bu yüzden -depth
önemlidir).
Bu komando başlı başına özellikle yeniden adlandırmak istediğiniz dosyaları bulmak için kullanışlıdır. Dosya adı çakışmaları veya hataları nedeniyle hala değiştirilmemiş dosyaları aramak için, tüm yeniden adlandırma komutundan sonra bunu kullanın.
sed -n 's/\(.*\/\)\(.*\)/mv -n -v -T \1\2 \1\L\2/p'
Bu bölüm, çıktısını alan dosyaları okur find
ve bunları mv
normal bir ifade kullanarak bir komutta biçimlendirir . -n
Seçenek durdurur sed
girişi yazdırmasını ve p
arama ve değiştirme regex çıkışlar yerini metin komut.
Normal ifadenin kendisi iki yakalamadan oluşur: sonuncuya kadar olan kısım / (dosyanın dizini) ve dosya adının kendisi. Dizin bozulmadan bırakılır, ancak dosya adı küçük harfe dönüştürülür. Yani, find
çıktılar olursa ./FOO/BAR
, olacak mv -n -v -T ./FOO/BAR ./FOO/bar
. Yapma -n
seçeneği, mv
varolan küçük harfli dosyaların üzerine yazılmamasını sağlar. -v
opsiyon markalarımv
her değişikliği çıktı yapar (veya ./FOO/bar
zaten yapmadıysa ./FOO/BAR -> ./FOO/BAR
, herhangi bir değişiklik yapılmadığına dikkat ederek). -T
Burada çok önemli - bir dizin olarak hedef dosya davranır. Bu, eğer bu dizin mevcutsa ./FOO/BAR
taşınmaz ./FOO/bar
.
İle birlikte kullanın find
komutların bir listesini oluşturmak için (gerçekten yapmadan ne yapılacağını doğrulamak için kullanışlı)
sh
Bu oldukça açıklayıcı. Oluşturulan tüm mv
komutları kabuk yorumlayıcısına yönlendirir. Bunu, bash
veya istediğiniz herhangi bir kabukla değiştirebilirsiniz .
ABCdef
,abcDEF
veaBcDeF
? Yeniden adlandırma komut dosyası iptal edilmeli mi yoksa sadece uyarılıp devam etmeli mi? 2. US-ASCII dışı isimler için küçük harfleri nasıl tanımlarsınız? Bu adlar mevcutsa, önce bir kontrol ve hariç tutma geçişi yapılmalıdır? 3. Bir yeniden adlandırma işlemi gerçekleştiriyorsanız