ฉันต้องใช้คำสั่งอะไรเพื่อลบไฟล์ที่เรียกว่า `-rf`


67

ฉันทำสิ่งที่บ้าในบางครั้งที่สร้างไฟล์ที่เรียกว่า-rfในระบบไฟล์ของฉัน
ตอนนี้ฉันหาวิธีลบไม่ได้ ...

ฉันได้ลองแล้ว:

rm "-rf"
rm \-rf

สิ่งเหล่านี้เพิ่งจะออกไปทันทีarrgh!

ใครรู้วิธีลบไฟล์นี้ ดีกว่าโดยไม่ตั้งใจทำความสะอาดโฟลเดอร์ทั้งหมดของฉัน


33
ประสาทบางส่วนพยายามที่จะrmเรียกไฟล์-rfจากระบบของคุณโดยไม่จำไวยากรณ์ที่แน่นอน!
ChristopheD

3
เพื่ออธิบายว่าทำไมผู้ที่ไม่ได้ทำงาน: คำคมและ Escape ที่มีการแยกวิเคราะห์โดยเปลือกของคุณ (โดยปกติทุบตี) แล้วผลของการแยกจะถูกส่งผ่านไปrm(ในมันargcและargv) ดังนั้นทั้งสองผลผู้ที่อยู่ในอาร์เรย์["rm", "-rf"]จะถูกส่งผ่านไปยังrm, ซึ่งทำในสิ่งที่คุณคาดหวัง
Thanatos

3
ฉันคิดว่ามันใกล้เคียงกับสำเนาของอันนี้จาก Unix และ Linux stackexchange: unix.stackexchange.com/questions/1519/…
frabjous

12
ปิดปากเก่าคือการได้รับชื่อไฟล์*ในโฟลเดอร์ รวมหนึ่งชื่อ-rfด้วยเช่นกันและดูความสนุก ;-)
RBerteig

mkdir './-rf '@RBerteig : (ls --classify ซึ่งเป็นค่าเริ่มต้นทั่วไปในนามแฝงของเชลล์จะผนวก a /)

คำตอบ:


127
unlink -rf

หรือ

rm -- -rf

47
นี่เป็นทางออกที่มีประโยชน์ที่สุดในการเรียนรู้ IMO เพราะ '-' เพื่อหยุดการประมวลผลข้อโต้แย้งเป็นมาตรฐานในเครื่องมือ GNU
Nathan O'Sullivan

1
เพื่อให้แม่นยำยิ่งขึ้นสิ่งที่ใช้GNUgetoptนั้น--ควรมีความหมายว่าเครื่องมือ linux ที่ทันสมัยที่สุด
Geoffrey Zheng


34

หรือคุณสามารถแก้ไขไดเรกทอรีในและลบไฟล์ด้วยวิธีนั้นได้ตลอดเวลา

vim .

จากนั้นเพียงแค่ลบบรรทัดที่มีไฟล์อยู่ (โดยใช้ D, dd จะไม่ทำงาน)


5
เคล็ดลับดี! [ตัวอักษรไร้ประโยชน์หลายตัว]
Sergio Acosta

ฉันไม่คิดว่าสิ่งนี้สมควรได้รับ downvotes ที่มีเมื่อฉันเห็นคำตอบนี้เมื่อบ่ายวานนี้ แต่ฉันไม่มีโอกาสไปตรวจสอบว่าvimมีโหมด dire เห็นได้ชัดว่าการแก้ไขไดเรกทอรีจริงในtext editor นั้นไม่แนะนำหรือเป็นไปไม่ได้หากไม่มีการกระโดดแบบห่วงผู้เชี่ยวชาญ โปรดทราบว่าemacsจะใช้งานได้เช่นกันและด้วยเหตุผลเดียวกัน
RBerteig

1
คะแนนพิเศษสำหรับการใช้เป็นกลุ่มที่ฉลาด! :)
Pierre-Antoine LaFayette


25

เทคนิคทั่วไปสำหรับการลบชื่อไฟล์แปลกคือการใช้

 ls -li

เพื่อค้นหาหมายเลข inode ของไฟล์จากนั้นใช้

find ./ -inum <number of file> -delete

ไม่จำเป็นต้องจำกรณีพิเศษทั้งหมด


4
ไม่ทราบว่าfindมีอำนาจในการลบไฟล์
zneak

นี่เป็นวิธีที่ยอดเยี่ยมสำหรับการจับไฟล์ที่มีชื่อที่ไม่รู้จัก (เริ่มต้นด้วยหรือรวมอักขระ backspace หรือมีช่องว่างพิเศษในตอนท้าย) หากคุณสามารถเข้าถึง GNU ที่เหมาะสมในกล่องของคุณ
Olfan

17

แม้ว่าฉันจะรู้เกี่ยวกับ "rm - -filename" เคล็ดลับโดยทั่วไปเมื่อฉันได้รับไฟล์ที่มีผู้นำ - ในชื่อที่ฉันต้องการลบฉันเริ่มจัดการไฟล์ GUI และทำจากที่นั่นเพื่อกำจัดโอกาส ของความผิดพลาด


1
เขาอาจไม่มี GUI เลยดังนั้นอาจใช้งานไม่ได้
Wuffers

12
ถ้ามันโง่และผิดอาจจะสมควรได้รับ downvote แต่ฉันไม่เชื่อในการ downvoting คำตอบนี้เพียงเพราะมัน 'อาจไม่ทำงาน' ไม่มีอันตรายใด ๆ ที่อาจเกิดขึ้นจากคำแนะนำนี้
JT.WK

4
มีผู้บัญชาการเที่ยงคืนอยู่เสมอ (หรือผู้จัดการไฟล์ที่ใช้คำสาปอื่น ๆ ) สำหรับผู้ที่ไม่มี X
thomasrutter


4

ในกรณีที่คุณอยู่ในระบบ Unix ของ GNU ที่คุณรู้สึกว่าตัวเองถูกหวนกลับไปสู่ยุคหิน (ไม่มี--ไวยากรณ์ไม่มี-inumสวิตช์ที่จะค้นหาไม่มีคำสั่งยกเลิกการเชื่อมโยงบรรณาธิการของคุณปฏิเสธการแก้ไขไดเรกทอรีเป็นต้น) คุณยังสามารถช่วยเหลือตัวเองได้:

find . -name '-rf' -print | xargs rm -i

ซึ่งจะทำให้การค้นหาฟีดผู้สมัครที่มีศักยภาพทั้งหมดไปยัง rm ซึ่งจะขออนุญาต / ปฏิเสธสำหรับไฟล์ทุกไฟล์ที่ถูกป้อน

ในกรณีที่คุณrmไม่รองรับ-iสวิทช์ (HP-UX 10.2 บน PA-RISC 1.1 ใครบ้าง) ต้องระวังให้มากขึ้น:

find . -name '-rf' -print
# check that find's output is exactly and only what you need to delete
find . -name '-rf' -print | xargs rm

สิ่งที่ถ้าระบบของคุณไม่ได้มีfind?
Lie Ryan

นั่นจะเป็นความชั่วร้ายอย่างแน่นอน อนิจจาฉันยังไม่ได้ติดตั้ง Unix เลย คุณสามารถให้ตัวชี้กับฉันได้หรือไม่?
Olfan

ให้ความคิดคำตอบของฉันจะเหมาะสมกว่าคือคำถามที่ถามใน serverfault ผู้ใช้ระดับสูงนั้นไม่ค่อยน่าจะมีเครื่องจักรที่เก่าแก่เท่าที่ผมพูดถึง และผู้ที่ทำจะได้เรียนรู้ที่จะช่วยเหลือตัวเอง ;-)
Olfan

+1 @Olfan ในตัวคุณป้องกันคนเพียงแค่ตอนนี้ต้องเผชิญหน้ากับมรดกยูนิกซ์ในตู้เสื้อผ้าบางแห่งยังคงต้องการทรัพยากรที่จะเรียนรู้เคล็ดลับและเทคนิคจาก ...
RBerteig

3

สนับสนุนคำตอบของ jleedevฉันจะปรับปรุงด้วย:

rm -i -- -rf

เพื่ออยู่ในโหมดโต้ตอบและขอการยืนยันดังนั้นคุณจึงมั่นใจได้ในสิ่งที่คุณลบ (แม้ว่าวิธีการแก้ปัญหาจะดี แต่มันก็เพื่อความสบายใจของคุณ)

จริงๆแล้วใช้แม้แต่:

\rm -i -- -rf

เพื่อให้แน่ใจว่าคุณไม่ได้ใช้ชื่อแทน


2

ตามที่ได้รับการแนะนำแล้วฉันมักจะใช้ไวยากรณ์

rm -rf -- filename

เมื่อฉันต้องลบไฟล์ที่มีเส้นประเป็นคำนำหน้าเพราะ - พูดกับคำสั่งว่ามันไม่ได้ค้นหาพารามิเตอร์อื่น ๆ แต่เพียงแค่ชื่อไฟล์

เก็บไว้ในใจเพื่อปกป้องโฟลเดอร์สำคัญของฉันโดยการลบไฟล์โดยไม่ตั้งใจฉันถูกใช้เพื่อสร้างไฟล์ว่างที่เรียกว่าSimply -iซึ่งโดยปกติแล้วจะอยู่ที่ด้านบนของรายการไฟล์เมื่อแก้ไขการค้นหา * ดังนั้นคำสั่ง

rm -rf *

เมื่อ excuted ในโฟลเดอร์ที่ได้รับการป้องกันของฉันถูกระเบิดการดำเนินการในระหว่างการดำเนินการในคำสั่ง:

rm -rf -i filename1 filename2 .... (all the other files in the folder)

และเชลล์แทนที่การลบทุกอย่างทันทีหยุดถามการยืนยัน (เนื่องจากต้องใช้ตัวเลือก -i)


+1 สำหรับ-iแฮ็คชื่อไฟล์ - "ฉัน" ไม่เชื่อ แต่มันทดสอบออกมา!
rymo

2

ครั้งล่าสุดที่ฉันมีปัญหานี้ฉันแก้ไขด้วย:

หลาม

นำเข้าระบบปฏิบัติการ

os.remove ( "- RF")


1

มาร์ตินเคลย์ตันถูกต้อง

มันง่ายและมีเหตุผล หากตัวเลือกที่มีอยู่มันจะเสมอ-XXXหรือ--CCCCดังนั้นหากคุณใส่./หรือเส้นทางเต็ม-rfไม่สามารถพิจารณาเป็นตัวเลือกและจะถือเป็นสตริงปกติ

มันทำงานกับชื่อไฟล์ "ทั้งหมด" ที่แปลก

#pwd
/ tmp / ทดสอบ
#touch ./-rf
#ls 
-rf
#rm ./-rf 
#ls
#

1

rm - -rf เครื่องมือ gnu ส่วนใหญ่ยอมรับ - เป็นเครื่องหมายของการสิ้นสุดของตัวเลือก

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