Bagaimana saya bisa mengganti nama banyak file menggunakan regex?

20

Saya ingin mengganti nama banyak file di Mac OS X (10.7.2) .. Saya tidak memiliki paket perl untuk renameperintah tersebut.

File saya memiliki nama seperti "T452-102456-0.png" dan saya ingin menghapus bagian "-0". Saya tahu saya bisa melakukan tindakan ini dengan menulis skrip php-cli saya sendiri, tetapi saya ingin mengetahui solusi yang lebih mudah dan lebih cepat.

Raphaël
sumber
Bukankah ada kontradiksi logis antara "banyak file pdf" dan "File saya memiliki nama seperti" T452-102456-0.png ""?
manatwork
Oh ... jenis file tidak masalah, tapi itu benar ^^. Saya edit, terima kasih atas komentar Anda =)
Raphaël

Jawaban:

21

Bash atau Ksh bersama dengan mvbisa menyelesaikannya:

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

Jika nama file mungkin memiliki "0" setelah tanda hubung pertama juga dan "-0" selalu di depan titik, Anda mungkin ingin memasukkan titik itu juga dalam ekspresi:

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

Tetapi karena aturan penggantian nama itu sederhana, jika Anda memiliki renamedari paket util-linux , itu juga akan berlaku:

rename '-0.' '.' *.png
manatwork
sumber
ini bekerja dengan sempurna. Terima kasih banyak =)
Raphaël
3

Metode sederhana: File dalam direktori saat ini saja

Dengan zsh:

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

Dengan kerang lain:

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


Metode yang disempurnakan: File dalam direktori saat ini dan / atau subdirektori

Dengan zsh:

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

Dengan ksh93:

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

Dengan bash ≥4, seperti di atas, tetapi gunakan shopt -s globstaralih-alih setperintah.

Dengan kerang lain:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +
Gilles 'SANGAT berhenti menjadi jahat'
sumber
alasan bagus lainnya untuk menginstal zsh:) .... zmv
danidee
2

Dalam Kerang Ikan di OSX:

for f in *.png; mv -n $f (basename $f -0.png).png; end

Kerang Ikan: https://fishshell.com/

jeffmcneill
sumber
2
Dan downvote untuk alasan apa? Ini adalah jawaban yang valid untuk pertanyaan itu.
jeffmcneill
0

Jika Anda memiliki mmvpaket:

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

Seperti (versi terbaru) rename, ini akan sangat berhati-hati untuk menghindari menimpa file yang ada.

Toby Speight
sumber