it-swarm-tr.com

Geçerli dizinlerin tüm dosya adlarında bir karakter diğeriyle nasıl değiştirilir?

Geçerli klasördeki tüm dosyaları/alt dizinleri nasıl yeniden adlandırırsınız?

Diyelim ki boşluklu birçok dosya ve alt dizinim var ve tüm boşlukları alt çizgi ile değiştirmek istiyorum.

File 1
File 2
File 3
Dir 1
Dir 3

olarak yeniden adlandırılmalıdır

File_1
File_2
File_3
Dir_1
Dir_3
43
NobbZ

Alt dizinlerdeki dosyaları da yeniden adlandırmanız gerekiyorsa ve find, -execdir Yüklemini destekliyorsa,

find /search/path -depth -name '* *' \
    -execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;

@ Glenn jackman'a find için -depth Seçeneğini önerdiği ve beni düşündürdüğü için teşekkür ederiz.

Bazı sistemlerde (GNU/Linux olanlar dahil), find adında boşluklar ve geçerli karakterler oluşturmayan bayt dizileri içeren dosyaları bulamayabilir (tipik olarak, Yerel ayarlardan farklı bir karakter kümesinde kodlanan ASCII karakterleri). Yerel ayarı C (LC_ALL=C find... Gibi) olarak ayarlamak sorunu çözer.

37
enzotib

Herhangi bir Kabukta, adı boşluk içeren dosyaların üzerine döngü yapabilirsiniz. Boşlukları alt çizgi ile değiştirmek bash, ksh ve zsh'de ${VARIABLE//PATTERN/REPLACEMENT} yapı.

for x in *" "*; do
  mv -- "$x" "${x// /_}"
done

Debian, Ubuntu ve türevlerinde Perl rename (diğer dağıtımlar rename olarak farklı bir program gönderir 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

Bunun için rename kullanabilirsiniz (burada util-linux, Perl one) değil:

cd /path/to/dir
rename ' ' _ *\ *

Bu, addaki tüm dosya ve dizin alanlarını bulur ve bu alanı alt çizgiyle değiştirir. Glob dosyası eşleşmesini kullandığından, başlamak için doğru dizinde olmanız gerekir.

Özyinelemeli eşleşmeler yapmak isterseniz, ancak kendi adlarına yeniden adlandırılan dizinlerdeki öğeleri yakalamak için rename öğesini birkaç kez yürütmeniz gerekebilir:

cd /path/to/dir
shopt -s globstar
rename ' ' _ **/*\ *
!!; !!
13
Caleb

Yüklenmişse başka bir seçenek mmv olacaktır.

mmv \*\ \* \#1_#2
2
glglgl

Debian/Ubuntu'da, Caleb ve Gilles'in cevaplarını temel alarak, dosyaları tekrar tekrar adlandırmam için işe yarayan şey buydu:

cd /path/to/dir
shopt -s globstar
rename 's/ /_/g' **

Not: Hangi dosyaların ve nasıl yeniden adlandırılacağını önizlemek için -nrename ile değiştirin:

rename -n 's/ /_/g' **

Başka bir not: globstar ayarı ** tüm alt dizinlerdeki dosyaları eşleştirir, bu nedenle yalnızca geçerli dizin istenirse globstar'ı ayarlamayın veya * onun yerine **.

Bir not daha: Arama teriminin birden çok örneğine sahip dosyalar için rename komutunun birden fazla çalıştırılması gerekir.

1
Markus Pscheidt

Normal ifadelerde bir flash değilseniz (ben değilim!) Ve kde için tasarlanmış uygulamaları çalıştırabilirsiniz (kde - k masaüstü kullanıyorsanız veya kitaplıkları yüklüyse), krename harika bir grafik yardımcı programdır. değişikliklerden önce ve sonra görmenizi sağlar. Seçenek olarak bir dizi basit dönüşüme sahiptir ve düzenli ifadeleri de destekler. Birkaç ardışık dönüştürmeyi tek bir yeniden adlandırmada bile birleştirebilirsiniz, böylece hepsini bir kerede yapan tek bir karmaşık dönüşüm tasarlamak zorunda kalmazsınız. Ayrıca, bir yeniden adlandırma uygulandıktan sonra aynı dosyaları yeniden adlandırmaya devam etme seçeneği vardır.

Bunu çok sık kullanmıyorum, ama yaptığımda işi hızlı ve kolay bir şekilde hallediyor. İndirilen çeşitli medya dosyalarını yeniden adlandırırken gerçekten kullanışlı olur, böylece bunları sisteminizde eşit şekilde yönetebilirsiniz. Krename kılavuzunu ayrı olarak indirmenize yardımcı olur, böylece programı kullanırken başvurabilirsiniz.

http://www.krename.net/

0
Joe