Sebagai tindak lanjut dari pertanyaan saya sebelumnya , jika saya memiliki beberapa file formulir
sw.ras.001
sw.ras.002
sw.ras.003
…
Perintah apa yang bisa saya gunakan untuk menghapus ras.
di tengah semua file?
\.
dalam pola.
Sebagai tindak lanjut dari pertanyaan saya sebelumnya , jika saya memiliki beberapa file formulir
sw.ras.001
sw.ras.002
sw.ras.003
…
Perintah apa yang bisa saya gunakan untuk menghapus ras.
di tengah semua file?
\.
dalam pola.
Jawaban:
Anda dapat melakukan ini dengan modifikasi yang cukup kecil dari salah satu jawaban dari pertanyaan terakhir:
rename s/ras\.// sw.ras.*
atau
for file in sw.ras.*; do
mv "$file" "${file/ras./}"
done
Penjelasan:
rename
adalah perl
script yang mengambil perl
ekspresi reguler dan daftar file, berlaku regex untuk setiap nama file pada gilirannya, dan mengganti nama setiap file untuk hasil dari penerapan regex. Dalam kasus kami, ras
cocok harfiah dan \.
cocok literal sebuah .
(sebagai .
sendiri menunjukkan karakter apapun selain baris baru), dan menggantikan yang dengan apa-apa.
The for
Loop mengambil semua file yang dimulai dengan sw.ras.
(standar shell gumpal) dan loop atas mereka. ${var/search/replace}
pencarian $var
untuk search
dan menggantikan kejadian pertama dengan replace
, sehingga ${file/ras./}
kembali $file
dengan yang pertama ras.
dihapus. Perintah dengan demikian mengubah nama file menjadi minus nama yang sama ras.
. Perhatikan bahwa dengan pencarian ini dan ganti, .
diambil secara harfiah, bukan sebagai karakter khusus.
Pilihan lain adalah menggunakan mmv (Mass MoVe dan ganti nama):
mmv '*ras.*' '#1#2'
Jangan lupa untuk menggunakan tanda kutip tunggal di sekitar pola Anda, jika bintang-bintang akan diperluas pada tingkat shell.
Utilitas tidak selalu tersedia tetapi jika tidak, Anda dapat menginstalnya dengan:
sudo apt-get install mmv
Lihat halaman manual di sini .
Dalam setiap shell POSIX-compliant ( bash
, dash
, ksh
, dll):
for file in sw.ras.[[:digit:]][[:digit:]][[:digit:]]; do
mv "${file}" "${file/ras\./}"
done
Atau dengan rename
:
rename 's/ras\.//' sw.ras.[[:digit:]][[:digit:]][[:digit:]]
Saya baru-baru ini harus melakukan penggantian nama massal sejumlah file di mana saya harus mengganti kemunculan terakhir karakter di mana karakter muncul beberapa kali dalam nama file. Dalam kasus khusus ini saya harus mengganti tanda hubung terakhir -
dengan garis bawah _
, memutarnya:
some-long-file-name.ext
dalam hal ini:
some-long-file_name.ext
Butuh beberapa waktu tetapi ini akhirnya berhasil:
for FILE in *; do mv $FILE ${FILE%-*}_${FILE##*-}; done
Sini:
${i%-*}
cocok dengan awal nama file hingga kemunculan dasbor terakhir -
${file##*-}
cocok dengan sisa nama file setelah kemunculan dasbor terakhir -
ras
, yaitu berakhir dengansw..001
, atauras.
, meninggalkansw.001
?