Dalam folder saya memiliki file .run dan saya mencoba untuk mengubah ekstensi ke .clu. Masalahnya adalah saya sudah mencoba
rename 's/.run$/.clu/' *.run
Tapi ini sama sekali tidak ada hubungannya dengan file.
Catatan: Saya tidak mencoba mengonversi file, hanya untuk mengubah nama ekstensi.
ls
atau apapun yang bermanfaat.for file in *.run ; do mv -f $file `echo $file | sed 's/\(.*\.\)run/\1clu/'` ; done
ini bekerja.Jawaban:
Saya tidak tahu apa masalah Anda. Apa yang telah Anda unggah berfungsi:
Ini
-vn
hanya memberitahu kita apa yang akan dilakukan jika dijalankan tanpanya.Saya lolos dari titik (jika tidak, itu adalah REGEX "apa pun") tetapi benar-benar tidak ada bedanya di sini. Ini bekerja juga tanpa itu.
Apakah mungkin Anda benar-benar berlari
rename.ul
? Periksa untuk memastikan Anda menggunakan rename Perl (yang menggunakan sintaks yang kami gunakan)dpkg -S $(readlink -f $(which rename))
perl: /usr/bin/prename
itu bagusutil-linux: /usr/bin/rename.ul
buruk. Untuk beberapa alasan Anda menggunakan rename versi yang sangat terbatas. Sesuatu yang sangat licin telah terjadi.Untuk saat ini, lihat apakah
prename
ada (Anda bisa menggunakannya untuk saat ini) dan jika tidak, mulailah bertanya mengapa Perl tidak diinstal dengan benar. Ini akan menyarankan Anda tidak menginstal Ubuntu.Atau jika Anda senang menggunakannya
rename.ul
, berikut ini akan berfungsi:Tapi itu mungkin mengunyah file seperti
test.run.hooray.run
ketest.clu.hooray.clu
yang jelas tidak besar.sumber
.
berarti "karakter apa saja", sementara\.
berarti.
- keduanya bekerja di sini.Saya lebih suka dalam kasus-kasus seperti ini
mmv
(tidak diinstal secara default di Ubuntu, tetapi Anda dapat menginstalnya menggunakansudo apt-get install mmv
perintah):Ini
-n
berarti bahwa ini adalah percobaan dan tidak akan benar-benar mengubah file apa pun. Ini akan menampilkan daftar file yang akan diubah namanya jika Anda menghapus-n
. Dalam kasus di atas, itu akan mengkonversi semua file di direktori saat ini dari ekstensi file.run
menjadi.clu
.Ini
-v
opsional, tetapi sebaiknya Anda memasukkannya karena ini adalah satu-satunya catatan yang akan Anda miliki tentang perubahan yang dibuat oleh perintah ganti nama.Lihat
man mmv
untuk info lebih lanjut.sumber
Anda cukup menggunakan
mv
:mv
digunakan untuk memindahkan / mengganti nama file. Lihat halaman manual mv untuk lebih lanjut.sumber
mv *.run *.clu
jika Anda yakin ingin mengubah nama semua*.run
file*.clu
di direktori yang Anda jalankan perintah ini.for file in *.run ; do mv $file echo $file | sed 's/\(.*\.\)run/\1clu/' ; done
ini sepertinya berhasilmv *.run *.clu
akan gagal atau memindahkan semua*run
file dan semua kecuali satu*clu
file ke direktori yang berakhir denganclu
jika ada dan dalam urutan abjad yang benar. Bagaimanapun, itu pasti tidak hanya akan mengubah ekstensi.Anda tidak perlu menggunakan
rename
ini. Anda dapat melakukannya menggunakanbasename
:basename
akan mencetak nama file (tanpa jalur) dan juga menghapus akhiran opsional. Oleh karena itu,"$(basename "$f" .run)".clu
nama file$f
dengan.run
ekstensi diganti denganclu
.Anda juga bisa menggunakan fitur manipulasi string bash sendiri :
Konstruk
${var%%string}
menghilangkan stringstring
dari akhir variabel$var
.sumber