Saya memiliki folder dengan serangkaian file bernama:
prefix_1234_567.png
prefix_abcd_efg.png
Saya ingin menghapus satu garis bawah dan konten tengah secara berkelompok sehingga hasilnya adalah:
prefix_567.png
prefix_efg.png
Relevan tetapi tidak sepenuhnya menjelaskan:
_*_
dengan yang kosong.Jawaban:
Dalam kasus khusus Anda, Anda dapat menggunakan
bash
perintah berikut (bash
adalah shell default di macOS):Catatan: Jika ada kemungkinan nama file Anda dimulai dengan
-
, tempatkan--
sebelum mereka [1]:mv -- "$f" "${f/_*_/_}"
Catatan:
echo
ditambahkan sebelum melakukan ujimv
coba. Hapus itu untuk melakukan penggantian nama yang sebenarnya.Anda dapat menjalankannya dari baris perintah atau menggunakannya dalam skrip.
"${f/_*_/_}"
adalah aplikasibash
perluasan parameter : pola pencocokan substring (pertama)_*_
diganti dengan literal_
, secara efektif memotong token tengah dari namanya._*_
ini adalah pola (ekspresi karakter pengganti, seperti yang juga digunakan untuk globbing), bukan ekspresi reguler (untuk mempelajari pola, menjalankan,man bash
dan menelusuriPattern Matching
).Jika Anda sering kali mengganti nama file secara batch, pertimbangkan untuk menginstal alat khusus seperti
rename
utilitas berbasis Perl . Di macOS Anda dapat menginstalnya menggunakan manajer paket populer Homebrew sebagai berikut:Inilah persamaan dari perintah di atas menggunakan
rename
:Sekali lagi, perintah ini melakukan uji coba; hapus
-n
untuk melakukan penggantian nama sebenarnya.bash
solusi,s/.../.../
melakukan substitusi teks, tetapi - tidak seperti inbash
- 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.sumber
.*
->$1
), mis. Ubah namaFoo bar S01E01 biz baz.ext
menjadiS01E01.ext
:rename -n -e 's/.*(S[0-9]{2}E[0-9]{2}).*(\.[a-z]{2,4})/$1$2/' *
echo
untuk lari kering. Terima kasih atas tipnya!brew install rename
Untuk mengganti nama file, Anda dapat menggunakan
rename
utilitas:brew install rename
Misalnya, untuk mengubah string pencarian di semua nama file di direktori saat ini:
Hapus parameter 'n' untuk menerapkan perubahan.
Info lebih lanjut:
man rename
sumber
OS X
versiGNU bash
( x86_64-apple-darwin ) tidak menyertakan utilitas ganti nama.brew install rename
rename -vs GLYCOPHORIN GLYCC *
dan sekarang secara otomatis mengganti nama 450+ file. Dan juga super cepat.Anda bisa menggunakan sed:
hasil:
* untuk melakukan uji coba terlebih dahulu, ganti
mv
di bagian akhir denganecho
Penjelasan:
sumber
ls * | xargs -I % bash -c 'echo mv "%" "$(sed 's@_.*_@_@' <<<"%")"'
(hapusecho
untuk benar-benar mengganti nama).Saya memiliki sekumpulan file yang terlihat seperti ini: be90-01.png dan perlu mengubah tanda hubung menjadi garis bawah. Saya menggunakan ini, yang bekerja dengan baik:
sumber
Anda dapat menginstal
rename
perintah dengan menggunakanbrew
. lakukanbrew install rename
dan gunakan saja.sumber
Menggunakan
mmv
sumber
sudo apt-get install mmv
.brew install mmv
.coba ini
Berikut cara lain:
sumber