Bir klasördeki tüm dosyaların tüm dosya uzantılarını hızlı bir şekilde değiştirmenin bir yolu var mı?


15

Mevcut formatlarında Android telefonumda çalmayacak geniş bir .m4b sesli kitap klasörüm var. Ancak .m4a olarak yeniden adlandırılırlarsa iyi çalışırlar

Bir klasördeki her .m4b dosyasını .m4a olarak yeniden adlandırabilen hızlı bir yöntem veya terminal komutu var mı? Dosyaların herhangi bir dönüşümüne gerek yoktur, sadece dosya uzantısının yeniden adlandırılması mükemmel çalışır.


2
FYI: renamebir PERL betiğidir ve düzenli ifadeleri kabul eder. Debian sistemlerinin de bir rename.ulkomutu vardır util-linux-ng package. Perl kurulu değilse (tamam, çok düşük;)) renameda kurulmaz .
Rinzwind

Yanıtlar:


17

Bu işi sizin için yapacak.

rename 's/.m4b$/.m4a/' *.m4b

Test çalıştırması için şu komutu kullanabilirsiniz:

rename 's/.m4b$/.m4a/' *.m4b -vn

-v "ayrıntılı" anlamına gelir ve dosya isimleri yeniden adlandırıldığında çıktı verir.

-n herhangi bir dosyayı yeniden adlandırmayacağı bir test çalıştırması yapar, ancak yeniden adlandırılacak dosyaların bir listesini gösterir.


Benimkinden çok daha iyi cevap. Tembel ve düzenli ifadeler kullanmaya çalışıyordum ...
adempewolff

Teşekkür ederim, bir tedavi çalışıyor. Çaba için @adempewolff'a teşekkürler
covernail

10

Dosyaları yeniden adlandırmanın çok hızlı bir yolu, yapmanız gereken tek şeyse ve bunları başka bir formata dönüştürmeniz gerekmiyorsa , Bash wiki'de çok güzel detaylandırılmış olan Bash'in parametre genişletmelerini kullanmaktır .

Uzantıyı değiştirmenin birkaç farklı yolu vardır, ancak burada basit ${var/original/replacement}paradigmayı kullanıyorum:

for file in *.m4b; do mv -- "${file}" "${file/%m4b/m4a}"; done

Komut tarafından neyin değişeceğini görmek istiyorsanız, echoönce yerleştirin mvve değişiklikler listelenecektir.

Bu oneliner'ın diğer dosyalar için de değiştirilebileceğini söylemeye gerek yok ve ayrıca dosya uzantılarını kaldırmak için parametre genişletmelerini de kullanabilirsiniz.


+1 Bu şekilde @Basharat Sial'ın cevabı ile aynı şekilde çalışır, ancak eşleşen birçok dosya olduğunda da çalışır *.m4b. Aksi takdirde hatayı görürsünüz argument list too long.
matt

Ayrıca, bunu izlemek için ayrıntılı bayrağı ekleyin:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
matt yanıyor
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.