Yanıtlar:
Ayrıca, alt dizinlerdeki dosyaları da yeniden adlandırmanız gerekirse ve siz find
de -execdir
yüklemeyi destekliyorsanız,
find /search/path -depth -name '* *' \
-execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;
Bana -depth
seçenek önerdiği find
ve beni düşündürttüğü için @glenn jackman'a teşekkür ederim .
Bazı sistemlerde (GNU / Linux olanlar dahil), find
adında boşluk ve ayrıca geçerli karakterler oluşturmayan bayt dizileri içeren dosyaları bulamayacağınıza dikkat edin (tipik olarak karakter setinde kodlanmış ASCII olmayan karakterlere sahip olan medya dosyalarında) yerel ayarlardan farklı). Yerel ayarın C
(olduğu gibi LC_ALL=C find...
) ayarlanması sorunu giderir.
-depth
seçeneğini kullanın ve bundan kurtulabilirsiniz sort
.
-name '* *'
için -name '*_*'
ve değişim "${1// /_}"
için"${1//_/.}"
bash
man sayfasında bulabilirsin.
Herhangi bir kabukta, adı boşluk içeren dosyaların üzerinde dolaşabilirsiniz. Boşlukların alt çizgi ile değiştirilmesi bash, ksh ve zsh ile ${VARIABLE//PATTERN/REPLACEMENT}
yapı içerisinde kolaydır .
for x in *" "*; do
mv -- "$x" "${x// /_}"
done
Debian, Ubuntu ve türevlerinde Perl'i kullanabilirsiniz rename
(diğer dağıtımlar farklı bir program gönderir rename
ve bu program burada yardımcı olmaz).
rename 's/ /_/g' *
Zorunlu bir zsh çözümü:
autoload zmv
zmv '(*)' '${1// /_}'
Zorunlu bir POSIX çözümü:
for x in *" "*; do
y=$(printf %sa "$x" | tr " " "_")
mv -- "$x" "${y%a}"
done
s/…/…/g
tüm oluşumları değiştirmek anlamına gelir. Kılavuzda çok iyi açıklanmadı . Dizinleri yeniden adlandırmak istiyorsanız, yolları var, lütfen araştırın (daha önce gördüm sanırım) ve bulamazsanız yeni bir soru sorun.
_MG_blah.JPG
için IMG_blah.JPG
.
Bunun için kullanabilirsiniz rename
(burada birini util-linux
değil birini varsayarsak perl
):
cd /path/to/dir
rename ' ' _ *\ *
Bu, addaki tüm dosya ve dizin alanlarını bulur ve boşluğu alt çizgi ile değiştirir. Glob dosyası eşleştirmesi kullandığından, başlamak için doğru dizinde olmanız gerekir.
Özyinelemeli eşleşmeler yapmak istiyorsanız, ancak rename
dizinlerinde yeniden adlandırılan öğeleri yakalamak için birkaç kez yürütmeniz gerekebilir :
cd /path/to/dir
shopt -s globstar
rename ' ' _ **/*\ *
!!; !!
rename
Değiştirerek belirtilen dosyaları yeniden adlandırır ilk oluşumunu itibaren tarafından kendi adlarına için .” Bu kendi adlarına tek boşluk ile dosyalar için yalnızca işleyecek Yani. ( rename
Bir döngüde çağırabilirsin , ama burası gerçekten doğru araç değil.)
mmv
Takılıysa başka bir seçenek olacaktır .
mmv \*\ \* \#1_#2
_
isimleri birden fazla boşlukla çalıştırmaz.
Debian / Ubuntu'da Caleb ve Gilles'un cevaplarını temel alarak, dosyaları tekrarlı bir şekilde yeniden adlandırmamda işe yarayan şey buydu:
cd /path/to/dir
shopt -s globstar
rename 's/ /_/g' **
Not: Hangi dosyaların yeniden adlandırılacağını ve nasıl önizleneceğini görmek için -n
anahtarı kullanın rename
:
rename -n 's/ /_/g' **
Başka bir not: ayar globstar
, **
tüm alt dizinlerdeki eşleşme dosyalarını yapar , bu nedenle yalnızca geçerli dizin isteniyorsa, globstar ayarlamayın veya *
bunun yerine kullanmayın **
.
Bir not daha: rename
Arama teriminin birden fazla tekrarı olan dosyalar için komutun bir defadan fazla çalıştırılması gerekir.
a b/c d
için a_b/c_d
çalışma olmaz, yeniden adlandırmak ilk ihtiyacım olacağını a b/c d
hiç a b/c_d
, ardından a b
karşı a_b
).
rename
komutu iki kere çalıştırmak anlamına mı geliyor ?
**
bash'ın nokta dosyaları hariç tuttuğunu ve sembolik işaretleri geçtiğini unutmayın .
Düzenli ifadelerde flaş değilseniz (değilim!) Ve kde için tasarlanmış uygulamaları çalıştırabilirsiniz (ya kde - k masaüstünü kullanırsınız ya da kitaplıkları kurulursa), krename harika bir grafik aracıdır. Değişiklikleri yapmadan önce ve sonra görmenizi sağlar . Seçenek olarak bir dizi basit dönüşüme sahiptir ve ayrıca düzenli ifadeleri de destekler. Birkaç sıralı dönüştürmeyi tek bir adla bile birleştirebilirsiniz, böylece hepsini bir kerede yapan tek bir karmaşık dönüşüm tasarlamak zorunda kalmazsınız. Aynı zamanda, yeniden adlandırma uygulandıktan sonra aynı dosyaları yeniden adlandırmaya devam etme seçeneği de vardır.
Bunu çok sık kullanmıyorum, ancak yaptığım zaman işi gerçekten hızlı ve kolay bir şekilde yapıyor. İndirilen çeşitli medya dosyalarını yeniden adlandırırken gerçekten kullanışlıdır, böylelikle bunları sisteminizde düzenli olarak yönetebilirsiniz. Program adı kullanılırken krename kullanım kılavuzunun ayrıca indirilmesine yardımcı olur.
find -maxdepth 1
OP'nin mevcut klasörde çalışması hakkında tam olarak ne istediğini yapmak için kullanmanız gerekir .