Jawaban:
for name in TestSR*
do
newname=CL"$(echo "$name" | cut -c7-)"
mv "$name" "$newname"
done
Ini menggunakan substitusi perintah bash untuk menghapus 6 karakter pertama dari nama file input via cut
, tambahkan CL
hasilnya, dan menyimpannya di $newname
. Kemudian mengganti nama lama menjadi nama baru. Ini dilakukan pada setiap file.
cut -c7-
menetapkan bahwa hanya karakter setelah indeks 7 yang harus dikembalikan dari input. 7-
adalah rentang yang dimulai pada indeks 7 tanpa akhir; yaitu, sampai akhir baris.
Sebelumnya, saya telah menggunakan cut -b7-
, tetapi -c
seharusnya digunakan untuk menangani pengkodean karakter yang dapat memiliki beberapa byte per karakter, seperti UTF-8.
Saya akan mengatakan yang paling sederhana untuk hanya menggunakan rename
perintah yang umum di banyak distribusi Linux. Ada dua versi umum dari perintah ini jadi periksa halaman manualnya untuk menemukan yang mana yang Anda miliki:
## rename from Perl (common in Debian systems -- Ubuntu, Mint, ...)
rename 's/^TestSR/CL/' *
## rename from util-linux-ng (common in Fedora systems, Red Hat, CentOS, ...)
rename TestSR CL *
Jika Anda ingin menggunakan versi dari util-linux-ng di sistem Debian, tersedia dengan nama rename.ul
rename
ada di alam liar. Periksa rename
dokumentasi lokal Anda untuk mengetahui cara menggunakan milik Anda.
rename TestSR '' *
rename "\<pre\>" "" *
->Unterminated <> operator at (user-supplied code).
Ekspansi parameter Shell sudah cukup untuk transformasi sederhana seperti ini. Substitusi perintah kurang efisien karena perlu menelurkan proses tambahan (untuk substitusi perintah itu sendiri dan cut
/ sed
).
for f in TestSR*; do mv "$f" "CL${f#TestSR}"; done
TestSR*
menemukan file, CL${f#TestSR}
akan menjadi nama baru. Barang-barang setelah #
akan diganti dari nama file ( f
).
Ini salah satu caranya:
ls *.{h,m} | while read a; do n=CL$(echo $a | sed -e 's/^Test//'); mv $a $n; done
ls *.{h,m}
-> Temukan semua file dengan ekstensi .h atau .mn=CL
-> Tambahkan awalan CL ke nama filesed -e 's/^Test//'
-> Menghapus awalan Uji dari nama filemv $a $n
-> Melakukan penggantian namaAnda dapat mencoba dengan:
for i in TestSR*; do mv ${i} ${i/#TestSR/CL}; done
Lihat man bash
(bagian "Ekspansi Parameter") untuk detailnya.
Yah, itu tidak sesulit yang saya kira.
$ for f in TestSR*.m; do mv $f CL$(echo $f | cut -c7-); done;
$ for f in TestSR*.h; do mv $f CL$(echo $f | cut -c7-); done;
for f in TestSR*.[mh]
, for f in TestSR*.{m,h}
, for f in TestSR*.m TestSR*.h
.
Jika Anda membutuhkan sesuatu yang lebih permanen, Anda dapat melakukan ini
perl -e 'for(@ARGV) { rename($_, $n) if( ($n = $_ ) =~ s/^TestSR/CL/) }' *