Bagaimana saya bisa menghapus file bernama ">"?

22

Saya menjalankan skrip Python yang tidak berfungsi dan digunakan sudountuk membuat file bernama >.

Bagaimana saya bisa menyingkirkan file ini?

Tentu saja, ketika saya mencoba sudo rm >, saya mendapatkan kesalahan bash: syntax error near unexpected token 'newline', karena itu berpikir saya sedang mencoba mengarahkan output dari rm.

Izinnya adalah -rw-r--r--.

Seseorang
sumber
10
Jawabannya benar, tentu saja, tetapi secara umum Anda dapat mempertimbangkan ini: bagaimana file dibuat di tempat pertama? (Tentu saja, sudo touch >pada shell akan memberikan kesalahan yang sama.) Anda mengatakan itu dengan skrip Python, mungkin dibuat dengan meneruskan ">"ke beberapa osfungsi. Jadi sudo python <<< 'import os; os.remove(">")'seharusnya bekerja dengan baik.
wchargin
4
Ini mengingatkan saya pada satu bug di windows di mana Anda benar-benar tidak dapat menghapus file dengan nama tertentu (tetapi tidak ada masalah membuatnya.)
PyRulez
PyRulez ooh, yang mana?
Austin Burk
8
Ironisnya, jawabannya ada pada judul yang Anda tulis sendiri.
Raphael

Jawaban:

54

Semua ini harus bekerja:

sudo rm \>
sudo rm '>'
sudo rm ">"
sudo find . -name '>' -delete
sudo find . -name '>' -exec rm {} +

Perhatikan bahwa dua perintah terakhir, yang menggunakan find, akan menemukan semua file atau direktori yang disebutkan >dalam folder saat ini dan semua subfoldernya. Untuk menghindarinya, gunakan GNU find:

sudo find . -maxdepth 1 -name '>' -delete
sudo find . -maxdepth 1 -name '>' -exec rm {} +
terdon
sumber
2
Ini mungkin layak menunjukkan yang findtidak suka rmkarena bersifat rekursif dan akan menghapus setiap file yang disebutkan di rmbawah pohon direktori Anda saat ini tidak peduli seberapa dalam.
jw013
6
@rahul Tiga yang pertama ( rmvarian) semuanya sama. Hanya ada tiga cara berbeda untuk melindungi nama file itu dari shell. Sebenarnya tidak ada alasan untuk memilih satu dari yang lain.
derobert
7
Mengapa Anda menyarankan find(1)? Satu-satunya masalah di sini adalah bahwa metacharacter shell perlu dikutip. Ada sejuta dan satu program berbeda yang dapat menghapus file, tetapi menggunakan apa pun selain rm(1)hanya mengaburkan jawabannya.
camh
2
Anda tidak perlu mencari GNU untuk menghindari pengulangan. sudo find . ! -name . -prune -name '>' -exec rm {} +.
hvd
2
Saya setuju dengan @camh, findtidak menambahkan apa pun untuk menjawab pertanyaan yang diajukan.
Paul Draper
18

Anda juga dapat menggunakan Python untuk menghapusnya:

python -c 'import os;os.remove(">")'

Dengan POSIX find:

find . ! -name . -prune -type f -name '>' -exec rm -f {} +
cuonglm
sumber
3
Mengapa mengganggu? Shell menyediakan banyak cara untuk menghindari interpretasi >sebagai redirection output.
alexis
3
@alexis imo Sebaiknya ketahui sebanyak mungkin cara untuk menyelesaikan tugas-tugas sederhana ini. jika op memiliki masalah lain seperti ini yang lebih sulit untuk diselesaikan dengan shell, mereka akan memiliki alat lain dalam kotak peralatan mereka untuk mencobanya
undergroundmonorail
1

Apa yang akhirnya saya lakukan pada awalnya juga berfungsi:

sudo sh -c "rm \>"

Ini, tentu saja, varian pada yang lebih sederhana sudo rm \>.

Seseorang
sumber
0

Saya mencoba ini sebagai komentar tetapi keluar semua dalam satu baris

[Harry@localhost]~% touch ">"
[Harry@localhost]~% cat > ">"
line 1
line 2
[Harry@localhost]~% cat ">"
line 1
line 2
[Harry@localhost]~% ls -l ">"
-rw-r--r-- 1 Harry Harry 14 Jun  5 12:04 >
[Harry@localhost]~% rm ">"
[Harry@localhost]~% ls -l ">"
ls: cannot access >: No such file or directory
[Harry@localhost]~% 
Harry Weston
sumber
Ini sudah dalam jawaban terdon, meskipun ...
John WH Smith
Ya, sebagian diberikan dalam jawaban tendon, saya setuju, saya hanya berpikir bahwa urutan ini sederhana dan membuatnya eksplisit. Seperti yang akan Anda lihat, saya mencoba memasukkannya sebagai komentar alih-alih jawaban, tetapi saya tidak tahu bagaimana cara menghindarinya agar semuanya keluar dalam satu baris. Ini juga menunjukkan Anda tidak perlu Python untuk membuat file, titik lain juga disarankan di komentar lain.
Harry Weston
0

Mengutip karakter sehingga tidak ditafsirkan oleh shell sebagai pengalihan:

sudo rm '>'

Namun, jika Anda memiliki file lain dengan karakter aneh, metode teraman adalah membuka explorer file GUI seperti nautilusdan menghapusnya di sana.

Cyker
sumber