ฉันจะลบไฟล์ชื่อ“>” ได้อย่างไร?


22

ผมทำงานสคริปต์หลามที่ผิดปกติและนำมาใช้ในการสร้างไฟล์ชื่อsudo>

ฉันจะกำจัดไฟล์นี้ได้อย่างไร

แน่นอนว่าเมื่อฉันพยายามที่sudo rm >ฉันได้รับข้อผิดพลาดเพราะคิดว่าฉันพยายามที่จะเปลี่ยนเส้นทางการส่งออกของbash: syntax error near unexpected token 'newline'rm

-rw-r--r--มันเป็นสิทธิ์


10
แน่นอนคำตอบนั้นถูกต้อง แต่โดยทั่วไปคุณอาจพิจารณาสิ่งนี้: ไฟล์นี้ถูกสร้างขึ้นตั้งแต่แรกอย่างไร? (แน่นอนsudo touch >เชลล์จะให้ข้อผิดพลาดเหมือนกัน) คุณบอกว่ามันเป็นสคริปต์ Python ที่สร้างขึ้นโดยการส่งผ่าน">"ไปยังosฟังก์ชันบางอย่าง ดังนั้นsudo python <<< 'import os; os.remove(">")'ควรทำงานได้ดี
wchargin

4
นี้ทำให้ผมนึกถึงหนึ่งในข้อผิดพลาด windows ที่คุณอย่างแท้จริงไม่สามารถลบไฟล์ที่มีชื่อบางอย่าง ( แต่มีปัญหาทำให้ไม่.)
PyRulez

PyRulez ooh ซึ่ง?
Austin Burk

8
กระแทกแดกดันคำตอบคือในชื่อที่คุณเขียนเอง
Raphael

คำตอบ:


54

สิ่งเหล่านี้ควรได้ผล:

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

โปรดทราบว่าทั้งสองคำสั่งที่ผ่านมาผู้ที่ใช้findจะพบทุกไฟล์หรือไดเรกทอรีชื่อ>ในโฟลเดอร์ปัจจุบันและโฟลเดอร์ย่อยทั้งหมด เพื่อหลีกเลี่ยงปัญหานี้ให้ใช้ GNU ค้นหา:

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

2
มันอาจจะคุ้มค่าที่ชี้ให้เห็นว่าfindไม่ชอบrmเพราะมันเป็น recursive และจะลบทุกไฟล์ชื่อrmใต้ต้นไม้ไดเรกทอรีปัจจุบันของคุณไม่ว่าลึก
jw013

6
@ ราอูลสามrmตัวแปรแรกนั้นเหมือนกันทั้งหมด เป็นเพียงสามวิธีในการปกป้องชื่อไฟล์นั้นจากเชลล์ ไม่มีเหตุผลใดที่จะชอบสิ่งอื่นมากกว่า
derobert

7
ทำไมคุณแนะนำfind(1)? ปัญหาเดียวที่นี่คือเชลล์ metacharacter จำเป็นต้องยกมา มีโปรแกรมที่แตกต่างกันหลายล้านรายการที่สามารถลบไฟล์rm(1)ได้
camh

2
คุณไม่จำเป็นต้องใช้ GNU เพื่อหลีกเลี่ยงการเรียกซ้ำ sudo find . ! -name . -prune -name '>' -exec rm {} +.
hvd

2
ฉันเห็นด้วยกับ @camh findไม่มีอะไรเพิ่มเติมสำหรับการตอบคำถามที่ถาม
พอลเดรเปอร์

18

คุณสามารถใช้ Python เพื่อลบมันได้:

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

ด้วย POSIX find:

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

3
ทำไมต้องรำคาญ เชลล์มีวิธีมากมายที่จะหลีกเลี่ยงการตีความ>เป็นการเปลี่ยนเส้นทางของเอาต์พุต
alexis

3
@alexis imo วิธีที่ดีที่สุดที่จะรู้วิธีการทำภารกิจง่ายๆเหล่านี้ให้ได้มากที่สุดเท่าที่จะทำได้ หาก op มีปัญหาอื่นเช่นนี้ซึ่งยากต่อการแก้ไขอย่างหมดจดด้วย shell พวกเขาจะมีเครื่องมืออีกอันในกล่องเครื่องมือเพื่อลองใช้ด้วย
undergroundmonorail

1

สิ่งที่ฉันทำตอนแรกก็ใช้งานได้:

sudo sh -c "rm \>"

sudo rm \>นี้เป็นของหลักสูตรที่แตกต่างบนที่เรียบง่าย


0

ฉันลองนี่เป็นความคิดเห็น แต่มันออกมาทั้งหมดในบรรทัดเดียว

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

นี่เป็นคำตอบของ terdon อยู่แล้วแม้ว่า ...
John WH Smith

ใช่มีบางส่วนที่ให้คำตอบในเอ็นฉันเห็นด้วยฉันแค่คิดว่าลำดับนี้เรียบง่ายและทำให้ชัดเจน อย่างที่คุณเห็นฉันพยายามรวมไว้เป็นความคิดเห็นมากกว่าคำตอบ แต่ฉันไม่รู้ว่าจะหลีกเลี่ยงได้ทั้งหมดในหนึ่งบรรทัด นอกจากนี้ยังแสดงว่าคุณไม่จำเป็นต้องใช้ Python ในการสร้างไฟล์อีกจุดหนึ่งยังแนะนำในความคิดเห็นอื่น
Harry Weston

0

อ้างถึงตัวละครเพื่อที่เชลล์จะไม่ถูกตีความว่าเป็นการเปลี่ยนเส้นทาง:

sudo rm '>'

อย่างไรก็ตามหากคุณมีไฟล์อื่น ๆ ที่มีตัวอักษรแปลก ๆ วิธีที่ปลอดภัยที่สุดคือเปิดไฟล์ GUI explorer เช่นnautilusและลบทิ้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.