it-swarm-id.com

Bagaimana cara menghapus file yang namanya dimulai dengan "-" (tanda hubung a.k.a. atau minus)?

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 caranya 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?

377
Bryan Rehbein

Gunakan "-" untuk membuat rm stop opsi penguraian perintah, seperti ini:

rm -- --help
559
Vegar Nilsen

Atau Anda bisa melakukannya

rm ./--help
236
edfuh

Gunakan find untuk melakukannya:

find . -name '--help' -delete

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 pilihan pertama, dan kemudian jika daftar file terlihat bagus jalankan saja dengan -delete.

Sebenarnya, Anda menghindari rm yang mendukung find (terutama dengan pratinjau terlebih dahulu) adalah kebiasaan yang baik yang akan membantu Anda menghindari kesalahan dengan rm * yang pasti akan menggigit Anda suatu hari.

Catatan, meskipun, penemuan itu akan berulang melalui semua subdirektori Anda, jadi Anda mungkin ingin menjalankannya dengan batasan kedalaman subdirektori seperti ini:

find . -maxdepth 1 -name '--help' -delete

yang membatasi pencarian ke direktori saat ini.

41
aculich

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 inodenya diperoleh dengan menggunakan ls -i Atau beberapa bentuk stat dan kemudian file tersebut dihapus dengan mencari file di direktori saat ini dengan nomor inode dan menjalankan perintah rm perintah pada file dengan nomor inode yang cocok

find . -inode <inode> -exec rm {}\;

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

TAB: menu-complete             # Tab: Cycles through the command
"\e[Z": menu-complete-backward # Shift-Tab: Cycles backwards

ke dalam file .inputrc Anda jika Anda menggunakan bash. Ini memungkinkan Anda untuk menelusuri daftar kemungkinan penyelesaian ( ntuk informasi lebih lanjut ).

21
Baldur

Solusi brutal:

Perl -e "unlink '--help' or die 'Could not unlink.';"

Perl -e "rmdir '-d' or die 'Could not rmdir.';"
11

Linux Walkthrough membuat file dengan tanda hubung dan spasi, lalu menghapusnya.

HATI-HATI! Jangan sengaja menjalankan rm -rf / atau perintah penghapusan kaskade serupa.

Jika file yang Anda coba hapus menyertakan tanda bintang atau garis miring, jangan sengaja memompa . atau /* atau * atau wildcard lain yang dapat menghapus sistem operasi Anda.

Buat file bernama "--yo yo"

[email protected] ~ $ touch -- "--yo yo"
[email protected] ~ $ ls
bin  --yo yo

Pertama, temukan dengan find:

[email protected] ~ $ find . -name "*--yo yo*"
./--yo yo

Pastikan perintah find ONLY menemukan SATU file yang ingin Anda hapus:

Kemudian berikan opsi -delete untuk menemukan, untuk menghapusnya:

[email protected] ~ $ find . -name "*--yo yo*" -delete
[email protected] ~ $ ls
bin  

Dan itu hilang.

8
Eric Leschinski

Midnight Commander (mc) adalah yang termudah, tunjuk saja dan tekan F8;)

2
Marcin

inilah solusi yang saya gunakan sebelum menemukan utas ini.
gunakan vim untuk direktori 'edit':

vim .

lalu (dalam vim) pilih file Anda, tekan del dan konfirmasi penghapusan.
ketika Anda selesai keluar dari vim dengan :q

1
atti

Sudahkah Anda mencoba menambahkan nama direktori sebagai awalan:

$ rm ./-filename.txt dirname/-filename2.txt
$ mv ./-filename.txt filename.txt
$ cp teste ./-teste

Menggunakan direktori sebagai awalan file secara umum membantu menghindari interpretasi yang salah dari karakter "minus" sebagai opsi perintah oleh fungsi parser.