Làm cách nào để xóa một tập tin có tên là >>>?


22

Tôi đang chạy một kịch bản Python bị trục trặc và được sử dụng sudođể tạo một tệp có tên >.

Làm thế nào tôi có thể thoát khỏi tập tin này?

Tất nhiên, khi tôi thử sudo rm >, tôi gặp lỗi bash: syntax error near unexpected token 'newline', vì nó nghĩ rằng tôi đang cố chuyển hướng đầu ra của rm.

Quyền của nó là -rw-r--r--.


10
Các câu trả lời là đúng, tất nhiên, nhưng nói chung bạn có thể xem xét điều này: làm thế nào các tập tin được tạo ra ở nơi đầu tiên? (Tất nhiên, sudo touch >tại một trình bao sẽ đưa ra cùng một lỗi.) Bạn nói rằng đó là với một tập lệnh Python, có lẽ được tạo bằng cách chuyển ">"đến một số oschức năng. Vì vậy, sudo python <<< 'import os; os.remove(">")'nên làm việc tốt.
wchargein

4
Điều này khiến tôi nhớ đến một lỗi trong các cửa sổ nơi bạn thực sự không thể xóa một tệp có tên nhất định (nhưng không có vấn đề gì trong việc tạo ra nó.)
PyRulez

PyRulez ooh, cái nào?
Austin Burk

8
Trớ trêu thay, câu trả lời là trong tiêu đề bạn tự viết.
Raphael

Câu trả lời:


54

Bất kỳ trong số này nên hoạt động:

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

Lưu ý rằng hai lệnh cuối cùng, những lệnh sử dụng find, sẽ tìm thấy tất cả các tệp hoặc thư mục có tên >trong thư mục hiện tại và tất cả các thư mục con của nó. Để tránh điều đó, hãy sử dụng GNU find:

sudo find . -maxdepth 1 -name '>' -delete
sudo find . -maxdepth 1 -name '>' -exec rm {} +

2
Có lẽ đáng để chỉ ra rằng điều đó findkhông thích rmbởi vì nó là đệ quy và sẽ xóa mọi tệp có tên rmdưới cây thư mục hiện tại của bạn cho dù sâu đến đâu.
jw013

6
@rahul Ba ( rmbiến thể) đầu tiên đều giống nhau. Đó chỉ là ba cách khác nhau để bảo vệ tên tệp đó khỏi trình bao. Thực sự không có lý do để thích cái này hơn cái khác.
derobert

7
Tại sao bạn đề nghị find(1)? Vấn đề duy nhất ở đây là một metacharacter vỏ cần được trích dẫn. Có một triệu chương trình khác nhau có thể xóa một tập tin, nhưng sử dụng bất cứ thứ gì khác ngoài việc rm(1)làm xáo trộn câu trả lời.
camh

2
Bạn không cần tìm GNU để tránh đệ quy. sudo find . ! -name . -prune -name '>' -exec rm {} +.
hvd

2
Tôi đồng ý với @camh, findkhông thêm gì để trả lời câu hỏi được hỏi.
Paul Draper

18

Bạn cũng có thể sử dụng Python để xóa nó:

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

Với POSIX find:

find . ! -name . -prune -type f -name '>' -exec rm -f {} +

3
Quan tâm làm gì? Shell cung cấp nhiều cách để tránh diễn giải >là chuyển hướng đầu ra.
alexis

3
@alexis imo tốt nhất nên biết càng nhiều cách để hoàn thành các nhiệm vụ đơn giản này càng tốt. nếu op có một vấn đề như thế này đó là khó khăn hơn để giải quyết hoàn toàn với vỏ, họ sẽ có một công cụ trong hộp công cụ của họ để cung cấp cho nó một thử với
undergroundmonorail

1

Những gì tôi đã làm ban đầu cũng hoạt động:

sudo sh -c "rm \>"

Tất nhiên, đây là một biến thể trên đơn giản hơn sudo rm \>.


0

Tôi đã thử điều này như một bình luận nhưng nó xuất hiện trên một dòng

[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]~% 

Điều này đã có trong câu trả lời của terdon, mặc dù ...
John WH Smith

Vâng, nó được đưa ra một phần trong câu trả lời của gân, tôi đồng ý, tôi chỉ nghĩ rằng trình tự này là đơn giản và làm cho nó rõ ràng. Như bạn sẽ thấy tôi đã cố gắng đưa nó vào như một bình luận thay vì một câu trả lời, nhưng tôi không biết làm thế nào để tránh tất cả nó xuất hiện trên một dòng. Nó cũng cho thấy bạn không cần Python để tạo tệp, một điểm khác cũng được đề xuất trong các bình luận khác.
Harry Weston

0

Trích dẫn ký tự sao cho nó không được dịch bởi shell là một chuyển hướng:

sudo rm '>'

Tuy nhiên, nếu bạn có các tệp khác có các ký tự lạ, phương pháp an toàn nhất là mở trình khám phá tệp GUI như nautilusvà xóa nó ở đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.