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ı. renameMevcut ve varyasyonları birçok değildir findo bulabilmesi halinde, örneğin zaten değiştirildi yolunun (eski adıyla sopa gibi görünüyor, çünkü başarısız ./FOOardından ./FOO/BARyeniden adlandırma, ./FOOiçin ./foohala 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. -nameFiltre yalnızca ana dosya ismi değil, tam yol için de geçerlidir. Yani bu listeleyecek ./FOO/BARama 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 findve bunları mvnormal bir ifade kullanarak bir komutta biçimlendirir . -nSeçenek durdurur sedgirişi yazdırmasını ve parama 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 -nseçeneği, mvvarolan küçük harfli dosyaların üzerine yazılmamasını sağlar. -vopsiyon markalarımv her değişikliği çıktı yapar (veya ./FOO/barzaten yapmadıysa ./FOO/BAR -> ./FOO/BAR, herhangi bir değişiklik yapılmadığına dikkat ederek). -TBurada çok önemli - bir dizin olarak hedef dosya davranır. Bu, eğer bu dizin mevcutsa ./FOO/BARtaşı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 mvkomutları kabuk yorumlayıcısına yönlendirir. Bunu, bashveya istediğiniz herhangi bir kabukla değiştirebilirsiniz .
ABCdef,abcDEFveaBcDeF? 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