Tidak dapat mengganti nama file yang namanya dimulai dengan tanda hubung

37

Saya mencoba mengubah nama file dengan tanda hubung di awal namanya dan keduanya ini:

mv -example-file-name example-file-name

dan ini:

mv '-example-file-name' example-file-name

menghasilkan:

mv: invalid option -- 'e'
Desmond Hume
sumber
1
Baik gunakan path relatif file (./tmp/-example), path lengkap (/ home / a / tmp / -example) atau beri tahu mv bahwa Anda telah selesai memberikan opsi - dan yang berikut adalah file nama.
Ярослав Рахматуллин
Jika ada yang bertanya-tanya: mv *example-file-name example-file-namememiliki masalah yang sama, karena ekspansi nama file (AKA globbing) yang terjadi sebelumnya mvdisebut.
Walter Tross

Jawaban:

53

Sebagian besar perintah GNU / Linux memungkinkan --opsi untuk mengindikasikan akhir opsi sehingga -kata-kata yang diawali berikutnya tidak diperlakukan sebagai opsi.

  mv -- -example-file-name example-file-name

Tes kecil

$ touch -- -example
$ ls -l -- *ample
-rw-r--r-- 1 rgb rgb 0 Nov 25 09:57 -example
$ mv -- -example example
$
RedGrittyBrick
sumber
Ini menyelesaikan masalah yang sama renamejuga. (setidaknya versi yang berfungsi seperti itu rename [options] <expression> <replacement> <file>..., mana saja yang ada.)
underscore_d
Sial, BSD / Mac OS X mvtidak punya ini :(
Sridhar Sarnobat
18

Jawaban RedGrittyBrick sangat baik. Pilihan lain adalah:

mv ./-example-file-name example-file-name

Tes kecil:

$ touch ./-example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./-example
$ mv ./-example example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./example
gniourf_gniourf
sumber
solusi yang sangat bagus, ini tidak pernah terpikir oleh saya. Dan tidak seperti jawaban yang diterima, ini akan bekerja pada BSD / Mac OS X
Sridhar Sarnobat
Itu sedikit lebih menarik daripada --.
Corni
-1

Anda bisa menggunakan ini:

rename -- "s/\-//g" *

itu bisa mengganti nama semua file :) jika nama file Anda:

-ng--sh-ay-01[------------]-FLV

setelah menjalankan kode, nama file Anda menjadi:

ngshay01[]FLV
k-lima
sumber
1
Pendekatan lain (yang oleh RedGrittyBrick, dan gniourf_gniourf) lebih mungkin bekerja dengan beberapa perintah lain.
TOOGAM
-1

Trik ini bekerja untuk saya di saat putus asa. YMMV

rename \- '' *

Anda harus menghindari tanda hubung untuk mengganti nama untuk mengenalinya. Mengapa mengganti nama tidak menghormati tanda kutip tunggal atau menawarkan semacam pengabaian adalah di luar jangkauan saya.

Ini adalah satu-satunya metode yang saya lihat yang andal menangani tanda hubung menggunakan rename terkemuka. Saya setuju dengan posting lain tentang penggunaan mv, tetapi jika Anda tidak dapat menggunakan mv karena alasan apa pun, ini berfungsi.

Alex Z
sumber