Yanıtlar:
Sadece bash kullanın, harici komutları çağırmanıza gerek yok.
for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done
Ekleme #!/bin/sh
Bu tek astara ihtiyaç duyanlar için:
for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
Do not add #!/bin/shmı? Bu ifadeyle birlikte / bu deyim olmadan çalışmayı denedim.
#!/bin/bash. Bununla birlikte, bash normalde birçok bilgisayarda varsayılan kabuktur, bu yüzden çok fazla fark bulamazsınız: D Burada
renameKomutu dene :
rename 's/_h.png/_half.png/' *.png
Güncelleme:
örnek kullanım:
biraz içerik oluştur
$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls
one_h.png three_h.png two_h.png
test çözümü:
$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png three_half.png two_half.png
ls? ne rename ...deniyorsun
renamestandart bir Unix aracı değildir.
brew install rename
's//'rename [options] expression replacement file...rename from util-linux 2.23.2
.sadece bir nokta ile değil HERHANGİ bir karakterle eşleştiğini unutmayın - gerçek nokta için, \.bunun yerine kullanın
for f in *.png; do
fnew=`echo $f | sed 's/_h.png/_half.png/'`
mv $f $fnew
done
mv $f $fnewile echo $fnewikinci hat çıkışı görünüyor aklı başında emin olmak için.
Saf bir bash çözümü mü arıyorsunuz? Birçok yaklaşım var, ama burada bir tane var.
for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done
Bu, geçerli dizinde sona eren dosyaların _h.pngyeniden adlandırmak istediğiniz dosyalar olduğunu varsayar .
Çok daha spesifik olarak
for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done
Bu iki örneği varsayalım sadece sizin. Dosyalar.
Genel durumda, dosya içinde yeniden adlandırma etti edilmiş örtülü önce .
renamePerl ile yazılmış yardımcı programı kullanın . Gerçi varsayılan olarak mevcut olmayabilir ...
$ touch 0{5..6}_h.png
$ ls
05_h.png 06_h.png
$ rename 's/h/half/' *.png
$ ls
05_half.png 06_half.png
Benzer bir sorum vardı: Kılavuzda, yeniden adlandırma
rename [option] expression replacement file
böylece bu şekilde kullanabilirsiniz
rename _h _half *.png
Kodda: '_h' aradığınız ifadedir. '_half' ile değiştirmek istediğiniz kalıptır. '* .png' olası hedef dosyalarınızı aradığınız dosya aralığıdır.
Umarım bu yardımcı olabilir:
renameYardımcı programı kullanın :
rc@bvm3:/tmp/foo $ touch 05_h.png 06_h.png
rc@bvm3:/tmp/foo $ rename 's/_h/_half/' *
rc@bvm3:/tmp/foo $ ls -l
total 0
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 05_half.png
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 06_half.png
Yanıt seti tamamlanmış olsa da , eksik bir tane daha eklemem gerekiyor.
for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done