ฉันจะลบไฟล์หรือไดเรกทอรีที่เรียกว่า“ \” ได้อย่างไร


20

ฉันใช้เทอร์มินัลในเครื่อง Ubuntu และมีไฟล์ที่ฉันต้องการลบ ชื่อของไฟล์คือ\(เพียงแบ็กสแลช)

ตอนนี้ฉันมักจะทำ

rm filename

อย่างไรก็ตามถ้าฉันทำrm \แล้วก็คิดว่าฉันพยายามเขียนคำสั่งหลายบรรทัด

ฉันจะลบไฟล์นี้ได้อย่างไร ฉันรู้ว่าฉันสามารถใช้ระบบไฟล์ GUI ได้ แต่นั่นไม่ได้มีประสิทธิภาพมาก

ดังนั้นฉันจะลบไฟล์ (ในเทอร์มินัล) ได้\อย่างไร?


1
ทำไมคุณถึงมีชื่อไฟล์นั้น (มันไม่ได้ให้ฉันใส่ไว้ในcodeบล็อกที่นี่ในความคิดเห็นนี้!)
AJMansfield

7
ความสนุกมากขึ้นพยายามลบไฟล์ชื่อ <BEL> หรือรู้จัก Ctrl-G ถ้าฉันจำได้ถูกต้อง ทุกครั้งที่คุณทำLSดังขึ้นแป้นพิมพ์ที่คุณจนกว่าคุณจะ (ก) การค้นพบที่มองไม่เห็นไฟล์ และ (b) กำหนดวิธีการลบไฟล์ที่มีอักขระที่ไม่สามารถพิมพ์ได้เพียงหนึ่งตัวในชื่อ
Pieter Geerkens

1
ที่สำคัญคุณจะลบไฟล์ที่ชื่อ "/" ได้อย่างไร?
Curt

1
@ เคิร์fsckต อย่างจริงจัง. หากไฟล์ชื่อ/มีอยู่ระบบไฟล์ของคุณเสียหาย
zwol

2
ฉันชอบไฟล์ที่ชื่อ*ตัวเองเสมอ ...
RBerteig

คำตอบ:


48

ใช้rm \\(ยกเว้นเครื่องหมายแบ็กสแลชด้วยแบ็กสแลชอื่น) โปรดทราบว่าสิ่งนี้สามารถใช้งานได้เช่นเดียวกันสำหรับไดเรกทอรีที่ชื่อ\(ใช้อย่างใดอย่างหนึ่งrmdirหรือใช้rmกับ-rแฟล็ก)

ตัวอย่าง:

> การสาธิต mkdir
> cd demo
> สัมผัส \\
> ls -l
รวม 0
-rw ------- 1 ผู้ใช้ hennes 0 ก.ค. 29 20:25 \
> rm \\
> ls -l
รวม 0

3
หรือภายใต้หลักการเดียวกันrm '\'(แต่ไม่ใช่ rm "\" )
evilsoup

2
@evilsoup เพียงเพื่อให้ความกระจ่างเพิ่มเติมเกี่ยวกับเรื่องนั้น\ ตัวละครจะถูกใช้เป็นตัวละครหนีในสตริงที่คั่นด้วยเครื่องหมายคำพูดคู่ การบอกว่าrm "\"จะถูกวิเคราะห์คำในสตริงที่ไม่มีการปิดบังเนื่องจากมีการใช้เครื่องหมายอัญประกาศคู่กับอักขระยกเว้น (และจะแยกวิเคราะห์เป็นอักขระเครื่องหมายคำพูดสองตัวไม่ใช่จุดสิ้นสุดของสตริง) "ดังนั้นสถานีจะรอจนกว่าคุณเสร็จสิ้นสตริงอีกด้วย วิธีการเทียบเท่าที่จะใช้เครื่องหมายคำพูดคู่ที่นี่จะเป็นrm "\\"(ซึ่งเทียบเท่าโดยตรงกับทั้งสองrm '\'และrm \\ ตามที่คุณได้รับการยืนยันแล้ว)
พัฒนา

15

ชั้นเชิงทั่วไปสำหรับการลบไฟล์ด้วยตัวเองที่น่าอึดอัดใจในชื่อของพวกเขาคือ

rm -i ./*

สิ่งนี้จะแจ้งให้คุณเลือกว่าจะลบแต่ละไฟล์ในไดเรกทอรีหรือไม่


3
หรือโสดมันเป็นถ่านตัวเดียว rm -i ./?
Hennes

1
ใช่. หากคุณสามารถเขียนรูปวงกลมที่เฉพาะเจาะจงได้มากกว่า. / * นั่นเป็นความคิดที่ดีเสมอโดยเฉพาะอย่างยิ่งเมื่อทำสิ่งที่ทำลายล้าง
zwol

4
+1 สำหรับคำนำหน้า glob ของคุณด้วย./
evilsoup

12

คุณสามารถยกเลิกการเชื่อมโยงได้โดยอ้างอิง inode ของไฟล์

linus ~/test $ touch \\
linus ~/test $ ls -li
total 0
15204561 -rw-r--r-- 1 pat sudo 0 Jul 29 23:03 \
linus ~/test $ find . -inum 15204561 -exec rm -v {} \;
removed `./\\'
linus ~/test $ ls -li
total 0
linus ~/test $ 

0

โปรดตรวจสอบไฟล์ inode ก่อน ls -li

137791 -rw-rw-r-- 1 svr svr 366 11 มี.ค. 15:57

inode ของ "\" คือ "137791 จากนั้นใช้คำสั่ง find เพื่อลบ" \ "ด้วยหมายเลข inode

หา -inum 137791 -exec rm -i {} \;

rm: ลบไฟล์ปกติ `./ \ 'หรือไม่ ใช่

"\" จะถูกลบออกจากนั้น

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