Normal ifadeyi kullanarak bir çok dosyayı nasıl yeniden adlandırabilirim?


20

Mac OS X (10.7.2) üzerinde bir çok dosyayı yeniden adlandırmak istiyorum .. renameKomut için perl paketi yok .

Dosyalarım "T452-102456-0.png" gibi adlara sahip ve "-0" bölümünü silmek istiyorum. Bu eylemi kendi php-cli komut dosyamı yazarak yapabileceğimi biliyorum, ancak daha kolay ve daha hızlı bir çözüm bilmek istiyorum.


“Çok sayıda pdf dosyası” ile “Dosyalarımın" T452-102456-0.png "gibi isimleri arasında mantıklı bir çelişki yok mu?
manatwork

Oh ... dosya türü önemli değil, ama doğru ^^.
Düzenliyorum

Yanıtlar:


21

Bash veya Ksh ile birlikte mvçözebilir:

for f in *.png; do mv -n "$f" "${f/-0}"; done

Dosya adının ilk kısa çizgiden sonra da “0” olması ve “-0” her zaman noktanın önünde olması durumunda, bu noktayı ifadeye de dahil etmek isteyebilirsiniz:

for f in *.png; do mv -n "$f" "${f/-0./.}"; done

Ancak bu yeniden adlandırma kuralı basit olduğundan rename, util-linux paketinden varsa, bunu da yapacak:

rename '-0.' '.' *.png

mükemmel çalışıyor. Çok teşekkür ederim =)
Raphaël

3

Basit yöntem: Yalnızca geçerli dizindeki dosyalar

Zsh ile:

autoload zmv
zmv '(*)-0(.png)' '$1$2'

Diğer mermilerle:

for x in *-0.png; do mv -- "$x" "${x%-0.*}.png"; done


Geliştirilmiş yöntem: Geçerli dizindeki ve / veya alt dizinlerdeki dosyalar

Zsh ile:

zmv '(**/)(*)-0(.png)' '$1$2$3'

Ksh93 ile:

set -o globstar
for x in **/*-0.png; do mv -- "$x" "${x%-0.*}.png"; done

Yukarıdaki gibi bash ≥4 ile, ancak komut shopt -s globstaryerine setkullanın.

Diğer mermilerle:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +

zsh'ı yüklemek için başka bir harika neden:) .... zmv
danidee


0

Eğer varsa mmvpaketi:

mmv '*-0.png' '#1.png'

(Son sürümleri) gibi rename, bu da mevcut dosyaların üzerine yazılmasını önlemek için makul bir özen gösterecektir.

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.