Ok, saya punya banyak file dimulai dengan tanda hubung, -. Yang tidak begitu baik ... dan saya ingin mengubah nama mereka. Dalam kasus khusus saya, saya hanya ingin menempatkan karakter di depan mereka.
Saya menemukan baris berikut yang seharusnya berfungsi, tetapi karena gagal, baris ini tidak:
for file in -N*.ext; do mv $file x$file; done
Jika saya meletakkan echo
di depan mv
saya mendapat banyak
mv -N1.ext x-f1.ext
mv -N2.ext x-f2.ext
Yang benar, kecuali tentu saja akan berpikir nama file pertama adalah opsi. Jadi ketika saya menghapus echo
dan menjalankannya saya hanya mendapatkan banyak
mv: illegal option -- N
Saya sudah mencoba mengubahnya
for file in -N*.ext; do mv "$file" "x$file"; done
tapi kutipannya sepertinya diabaikan saja. Sudah mencoba menggunakan tanda kutip tunggal, tetapi variabelnya tidak diperluas ... Apa yang harus saya lakukan di sini?
Pembaruan: Saya sekarang juga telah mencoba mengutip penawaran. Seperti ini:
for file in -N*.ext; do mv '"'$file'"' '"'x$file'"'; done
Dan ketika saya menggemakannya, itu terlihat benar, tetapi ketika saya benar-benar menjalankannya saya baru saja mendapatkannya
mv: rename "-N1.ext" to "x-n1.ext":: No such file or directory
Saya baru saja tidak tahu bagaimana melakukan ini sekarang ... sigh
Jawaban:
Anda perlu menggunakan kata kunci
--
untuk memberi tahu perintah mv bahwa argumen tidak harus ditafsirkan sebagai opsi. Menonton:Gunakan
--
setelah semua opsi pada commandline. Misalnya, jika Anda mencoba menggunakan-i
opsi untuk mv , itu akan pergi sebelum--
:sumber
./
di depan nama file juga, yang akan berhasil. Tapi ini tentu saja pilihan yang lebih rapi :)./
baik. tetapi Anda benar, itu juga berhasil, untuk situasi ini.--
makna tidak memproses argumen lebih lanjut karena opsi adalah konvensi, dan tidak dihormati oleh semua program. Beberapa menggunakan satu-
untuk itu, dan beberapa tidak menerima apa pun untuk tujuan itu. Jadi, saling menandaskan./
perlu diingat.--
sebagai argumen khusus adalah ekstensi GNU, tetapi disebutkan dalam pedoman POSIX. lihat bagian 12.2, pedoman 10: opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html ... ini berarti Anda dapat mengharapkan sebagian besar utilitas POSIX dan GNU untuk menghormati konvensi, tetapi yang lain mungkin tidak.Teknik lain adalah memasukkan direktori induk dengan nama file ...
Untuk mengganti nama file '-file-to-rename' menjadi 'file-to-rename' ...
Terima kasih @ Skippy le Grand Gourou. Mengonfirmasi bahwa ./-file-to-rename berfungsi dengan
mv
danrm
seperti di ...sumber
./
.