Dalam kasus khusus Anda, Anda dapat menggunakan bashperintah berikut ( bashadalah shell default di macOS):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
Catatan: Jika ada kemungkinan nama file Anda dimulai dengan -, tempatkan -- sebelum mereka [1]:
mv -- "$f" "${f/_*_/_}"
Catatan: echoditambahkan sebelum melakukan uji mvcoba. Hapus itu untuk melakukan penggantian nama yang sebenarnya.
Anda dapat menjalankannya dari baris perintah atau menggunakannya dalam skrip.
"${f/_*_/_}"adalah aplikasi bash perluasan parameter : pola pencocokan substring (pertama) _*_diganti dengan literal _, secara efektif memotong token tengah dari namanya.
- Perhatikan bahwa
_*_ini adalah pola (ekspresi karakter pengganti, seperti yang juga digunakan untuk globbing), bukan ekspresi reguler (untuk mempelajari pola, menjalankan, man bashdan menelusuri Pattern Matching).
Jika Anda sering kali mengganti nama file secara batch, pertimbangkan untuk menginstal alat khusus seperti renameutilitas berbasis Perl . Di macOS Anda dapat menginstalnya menggunakan manajer paket populer Homebrew sebagai berikut:
brew install rename
Inilah persamaan dari perintah di atas menggunakan rename:
rename -n -e 's/_.*_/_/' *.png
Sekali lagi, perintah ini melakukan uji coba; hapus -nuntuk melakukan penggantian nama sebenarnya.
- Serupa dengan
bashsolusi, s/.../.../melakukan substitusi teks, tetapi - tidak seperti in bash- ekspresi reguler digunakan.
[1] Tujuan dari argumen khusus --, yang didukung oleh sebagian besar utilitas, adalah untuk memberi sinyal bahwa argumen selanjutnya harus diperlakukan sebagai operan (nilai), bahkan jika mereka terlihat seperti opsi yang dimulai dengan -, seperti yang dicatat oleh Jacob C.