Misalnya saya mau mv (.*?).sql $1.php
,
apakah ada perintah yang memungkinkan saya menentukan pola pengubahan nama?
sumber
Misalnya saya mau mv (.*?).sql $1.php
,
apakah ada perintah yang memungkinkan saya menentukan pola pengubahan nama?
Seperti yang disebutkan orang lain, rename
pandai dalam hal ini, tetapi bacalah halaman manual ( man rename
) sebelum Anda mencobanya. Setidaknya ada dua alat yang sama sekali berbeda di luar sana yang disebut rename
dan mana yang Anda miliki tergantung pada distribusi Anda. Menyebut mereka secara salah bisa berbahaya.
Inilah halaman manual untuk versi berbasis perl oleh Larry Wall yang dikirimkan bersama Ubuntu. Anda memberinya ekspresi perlrename 's/\.sql$/.php/' *.sql
Inilah halaman manual untuk penggantian nama yang dikirimkan dengan distribusi Red Hat dan CentOS yang lebih lama. Penggunaan adalah substitusi string sederhana sepertirename .sql .php *.sql
Anda juga bisa menggunakan bash one-liner untuk memproses setiap file satu per satu:
$ for f in *.sql; do mv -i "$f" "${f%%.*}.php"; done
rename
fungsi (yaitu busybox)Ada
rename(1)
, yang tidak menggunakan regex, tetapi bisa menyelesaikan masalah Anda:Ada juga
mmv(1)
, tapi saya tidak terbiasa dengan cara kerjanya.sumber
/usr/bin/rename
tautan ke/usr/bin/prename
secara default, yang membutuhkan regexps.Hari,
Anda juga bisa mencoba masuk
Atau untuk membuatnya gunakan regex, ubah sedikit ke
untuk sedikit bersenang-senang coding shell. (-:
sumber
ls
output .sed
contoh cukup baik, meskipun.Menjadi tukang ledeng, saya suka pipa :)
Catatan: jawaban ini verbose - sebagai pemula saya menghargainya ketika seseorang yang tahu meluangkan waktu untuk menjelaskan, jadi saya membayar 'maju'. Jika Anda bukan pemula, mohon panjang dan verbositas.
Dimana:
daftar semua file yang cocok dengan pola, dalam hal ini saya mencari file dengan tanggal dalam nama file dalam bentuk 'YYYYMMDD'
^ 1: Grup tangkapan pertama - seluruh nama file
^ 2: Grup tangkapan ke-2 - bagian pertama dari pola nama file
^ 3: grup tangkapan ketiga - bagian nama file ke-2 - di sini, tanggal sebagai 'YYYYMMDD'
^ 4: grup tangkapan ke-4 - bagian nama file opsional antara tanggal dan ekstensi, dan ekstensi itu sendiri
Sooooo .... jika saya memiliki file bernama
...kemudian
sebenarnya berarti
Perhatikan bahwa output dari perintah sed disalurkan melalui ke 'bash' untuk menjalankannya. Untuk melihat terlebih dahulu file yang diajukan bergerak TANPA benar-benar memindahkannya, hapus dulu '| bash 'di akhir, dan coba seperti ini:
Ini tidak akan membuat perubahan sama sekali, tetapi Anda akan melihat perintah yang akan dieksekusi JIKA Anda menjalankannya dengan '| bash 'ditandai pada akhirnya.
Ini berguna karena Anda dapat membuat sub-direktori yang Anda inginkan dari bagian-bagian dalam nama file, atau apa pun yang Anda tambahkan ke teks 'penggantian' dalam perintah sed. Perhatikan bahwa sed membutuhkan banyak karakter pelarian.
Kurung regex SED:
(...) membutuhkan pelolosan untuk ditangkap -> \ (... \)
{m, n} membutuhkan pelolosan untuk mengukur objek sebelumnya -> \ {m, n \}
/ mengharuskan melarikan diri dalam string pengganti -> \ /
[...] JANGAN mengharuskan melarikan diri untuk kelas karakter
\ 1 dalam string pengganti mengacu pada grup yang ditangkap pertama, dan seterusnya ...
PERINGATAN KEAMANAN: JANGAN PIPA APA PUN UNTUK 'bash' KECUALI JIKA ANDA SEPENUHNYA MEMAHAMI ...
Semoga itu bisa membantu membersihkan beberapa penyumbatan :)
sumber
Instal
mmv
, lalu lakukan ini:sumber