Bagaimana Anda menghapus file yang nama filenya dimulai dengan tanda hubung (tanda hubung atau minus) -
? Saya ssh'd ke server OSX jarak jauh dan saya memiliki file ini di direktori saya:
tohru:~ $ ls -l
total 8
-rw-r--r-- 1 me staff 1352 Aug 18 14:33 --help
...
Bagaimana saya bisa menghapus --help
dari CLI? Masalah ini adalah sesuatu yang saya temui dalam berbagai bentuk pada kesempatan, file-file ini mudah dibuat, tetapi sulit untuk dihilangkan.
Saya telah mencoba menggunakan backslash
rm \-\-help
Saya sudah mencoba kutipan
rm "--help"
Bagaimana cara mencegah karakter minus (tanda hubung atau tanda hubung) ditafsirkan sebagai opsi?
rm --help
sebenarnya menjelaskan cara menghapus nama file yang dimulai dengan a-
. pertanyaan yang bagus.Jawaban:
Gunakan "-" untuk membuat rm stop opsi penguraian perintah, seperti ini:
sumber
rm
perintah mendukung--
argumen?--
sebelum GNU (SysIII, 1980) dan standar / POSIX. Utilitas standar kecuali untuk beberapa pengecualian (sepertiecho
) mengerti--
. YMMV untuk perintah lain jika mereka tidak menggunakan getopt () API untuk menguraikan opsi.Atau Anda bisa melakukannya
sumber
--
secara khusus.-
utilitas teks ataucd
, yangfoo=bar
dariawk
...rm -- <filename>
tidak.Gunakan
find
untuk melakukannya:Dan ini adalah metode yang baik karena jika Anda memiliki lebih dari beberapa file seperti ini yang dapat Anda hapus, Anda bisa mendapatkan daftar pratinjau file dengan hanya menjalankan find tanpa
-delete
opsi terlebih dahulu, dan kemudian jika daftar file terlihat bagus jalankan saja lagi dengan-delete
.Bahkan, Anda menghindari
rm
mendukungfind
(terutama dengan pratinjau terlebih dahulu) adalah kebiasaan baik yang akan membantu Anda menghindari kesalahan denganrm *
yang pasti akan menggigit Anda suatu hari nanti.Catatan, meskipun, penemuan itu akan berulang melalui semua subdirektori Anda, jadi Anda mungkin ingin menjalankannya dengan batasan kedalaman subdirektori seperti ini:
yang membatasi pencarian ke direktori saat ini.
sumber
find
daftar file / dir untuk melihat. Jadifind . -name...
.-delete
dan-maxdepth
juga bukan opsi standar.Jawaban Vegar Nilsen dan edfuh sangat baik dan solusi yang tepat untuk masalah seperti ini.
Saya ingin menambahkan respons umum terhadap pertanyaan ini yang memungkinkan Anda menghapus file apa pun dengan nama file yang sulit. Pertama nomor inode-nya diperoleh dengan menggunakan
ls -i
atau beberapa bentukstat
dan kemudian file dihapus dengan mencari file dalam direktori saat ini dengan nomor inode dan menjalankanrm
perintah pada file dengan nomor inode yang cocok.Karena nomor inode unik di setiap sistem file, Anda dapat menghapus file apa pun menggunakan ini; unicode atau menggunakan karakter escape. Ini adalah cara yang sangat menjengkelkan untuk mengetik jadi saya akan merekomendasikan menambahkan baris
ke dalam
.inputrc
file Anda jika Anda menggunakan bash. Ini memungkinkan Anda untuk menelusuri daftar kemungkinan penyelesaian ( untuk informasi lebih lanjut ).sumber
find -name '--help' -delete
rm --help
, yang masih tidak akan menghapus file. Cukup gunakanrm ./--help
(ataurm -i *
.find
awalan jalur argumen baris perintah ke semua file, jadi itu akan berjalanrm ./--help
danrm ./sub/dirs/--help
. Untuk memperbaiki yang kedua, kita harus menambahkan-maxdepth 1
, tetapi semua ini pada dasarnya menerapkan solusi @ edfuh dengan cara yang lebih bundaran, berbelit-belit, dan-delete
lebih aman daripada yang lainnya-exec rm
.{}
dan\;
, jika tidak, tidak akan berhasil.-xdev
. Itu tidak akan membantu Anda menjalankannyals -i --help
.Solusi brutal:
sumber
Linux Walkthrough membuat file dengan tanda hubung dan spasi, lalu menghapusnya.
HATI-HATI! Jangan secara tidak sengaja menjalankan
rm -rf /
perintah penghapusan kaskade atau sejenisnya.Jika file yang Anda coba hapus menyertakan tanda bintang atau garis miring, jangan memompa secara tidak sengaja
.
atau/*
atau*
atau beberapa wildcard lain yang dapat menghapus sistem operasi Anda.Buat file bernama "--yo yo"
Pertama, temukan dengan find:
Pastikan perintah find ONLY menemukan SATU file yang ingin Anda hapus:
Kemudian berikan opsi -delete untuk menemukan, untuk menghapusnya:
Dan itu hilang.
sumber
Midnight Commander (
mc
) adalah yang termudah, cukup arahkan dan tekan F8;)sumber
apt-get install mc || yum install mc; mc
berbagai tombol panah dan F8 lebih mudah daripadarm ./--help
?inilah solusi yang saya gunakan sebelum menemukan utas ini.
gunakan
vim
untuk 'mengedit' direktori:lalu (dalam vim) pilih file Anda, tekan del dan konfirmasi penghapusan.
ketika Anda selesai berhenti dengan
:q
sumber
Sudahkah Anda mencoba menambahkan nama direktori sebagai awalan:
Menggunakan direktori sebagai awalan file secara umum membantu menghindari interpretasi yang salah dari karakter "minus" sebagai opsi perintah oleh fungsi parser.
sumber
Jika Anda ingin mengganti nama file
-.bar
,, (mv tidak akan berfungsi), coba ini:sebelum menggunakan perintah:
Anda harus dapat memeriksa konten file asli di foo.bar
sumber