Mengubah ekstensi file

2

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.

Dobz
sumber
1
Apakah Anda memiliki izin menulis pada file?
Jos
Saya punya izin menulis.
Dobz
Tolong, perlihatkan nama file yang ingin Anda ganti namanya. lsatau apapun yang bermanfaat.
Braiam
for file in *.run ; do mv -f $file `echo $file | sed 's/\(.*\.\)run/\1clu/'` ; doneini bekerja.
Dobz

Jawaban:

6

Saya tidak tahu apa masalah Anda. Apa yang telah Anda unggah berfungsi:

$ mkdir test
$ touch test/test{01..10}.run
$ rename 's/\.run$/.clu/' test/*.run -vn
test/test01.run renamed as test/test01.clu
test/test02.run renamed as test/test02.clu
test/test03.run renamed as test/test03.clu
test/test04.run renamed as test/test04.clu
test/test05.run renamed as test/test05.clu
test/test06.run renamed as test/test06.clu
test/test07.run renamed as test/test07.clu
test/test08.run renamed as test/test08.clu
test/test09.run renamed as test/test09.clu
test/test10.run renamed as test/test10.clu

Ini -vnhanya 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 bagus
  • util-linux: /usr/bin/rename.ulburuk. Untuk beberapa alasan Anda menggunakan rename versi yang sangat terbatas. Sesuatu yang sangat licin telah terjadi.

Untuk saat ini, lihat apakah prenameada (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:

rename.ul .run .clu *.run

Tapi itu mungkin mengunyah file seperti test.run.hooray.runke test.clu.hooray.cluyang jelas tidak besar.

Oli
sumber
melihat kode Anda, bisa jadi fakta bahwa setelah 'Anda' / '' sementara saya hanya punya '/', ini mungkin masalah saya. Saya akan mencobanya.
Dobz
@RussellHickey Ketika saya mengomentari jawaban lain yang sekarang dihapus, sama sekali tidak ada perbedaan di sini. Seperti yang Anda miliki, .berarti "karakter apa saja", sementara \.berarti .- keduanya bekerja di sini.
Oli
2

Saya lebih suka dalam kasus-kasus seperti ini mmv(tidak diinstal secara default di Ubuntu, tetapi Anda dapat menginstalnya menggunakan sudo apt-get install mmvperintah):

mmv -n '*.run' '#1.clu'

Ini -nberarti 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 .runmenjadi .clu.

mmv -v '*.run' '#1.clu'

Ini -vopsional, tetapi sebaiknya Anda memasukkannya karena ini adalah satu-satunya catatan yang akan Anda miliki tentang perubahan yang dibuat oleh perintah ganti nama.

Lihat man mmvuntuk info lebih lanjut.

Radu Rădeanu
sumber
1

Anda cukup menggunakan mv:

mv oldname newname

mvdigunakan untuk memindahkan / mengganti nama file. Lihat halaman manual mv untuk lebih lanjut.

pekerjaan
sumber
1
Ini akan digunakan dalam file build sehingga nama tidak akan diketahui.
Dobz
Anda bisa melakukannya mv *.run *.clujika Anda yakin ingin mengubah nama semua *.runfile *.cludi direktori yang Anda jalankan perintah ini.
jobin
ini akan memberikan nama keluaran sebagai '* .clu' Saya hanya mencoba mengubah ekstensi.
Dobz
for file in *.run ; do mv $file echo $file | sed 's/\(.*\.\)run/\1clu/' ; doneini sepertinya berhasil
Dobz
2
@Jobin mv *.run *.cluakan gagal atau memindahkan semua *runfile dan semua kecuali satu *clufile ke direktori yang berakhir dengan clujika ada dan dalam urutan abjad yang benar. Bagaimanapun, itu pasti tidak hanya akan mengubah ekstensi.
terdon
1

Anda tidak perlu menggunakan renameini. Anda dapat melakukannya menggunakan basename:

for f in *run; do mv "$f" "$(basename "$f" .run)".clu; done

basenameakan mencetak nama file (tanpa jalur) dan juga menghapus akhiran opsional. Oleh karena itu, "$(basename "$f" .run)".clunama file $fdengan .runekstensi diganti dengan clu.

Anda juga bisa menggunakan fitur manipulasi string bash sendiri :

for f in *run; do echo mv "$f" "${f%%.run}".clu; done

Konstruk ${var%%string}menghilangkan string stringdari akhir variabel $var.

terdon
sumber