วิธีลบไฟล์ด้วยชื่อแปลก ๆ ?


33

ฉันเขียนโปรแกรมที่ใช้ฟังก์ชั่นการแมปหน่วยความจำ POSIX ( mmap)

โปรแกรมใช้ไฟล์ ( a.dat) และหน่วยความจำแมปสำหรับการอ่าน / เขียน

เนื่องจากข้อผิดพลาดในโปรแกรมทุกครั้งที่ฉันเรียกใช้โปรแกรมไฟล์ที่มีชื่อแปลก ๆ (เช่น?d?P?^z??d?P?^z?) จะถูกสร้างขึ้น ข้อผิดพลาดได้รับการแก้ไข แต่ฉันไม่สามารถลบไฟล์ได้

ฉันไม่สามารถลบได้ทั้งโดยใช้บรรทัดคำสั่งหรือโดยการเลือก / ลบจากตัวจัดการหน้าต่าง

ดังนั้นฉันจะลบได้อย่างไร ฉันใช้ Ubuntu 11.04


1
แม้ว่าคุณจะไม่สามารถพิมพ์ชื่อไฟล์ได้อย่างง่ายดายการลบออกจากตัวจัดการไฟล์กราฟิกควรทำงานได้ดี คุณได้รับข้อผิดพลาดอะไร
โทมัส

2
@Aditya ฉันไม่มีปัญหาในการลบไฟล์ดังกล่าวออกจากบรรทัดคำสั่งเมื่อหนีชื่อด้วยเครื่องหมายคำพูดเดี่ยว ( rm '?d?P?^z??d?P?^z?') คุณลองทำไหม
Frédéric Hamidi

การลบจากตัวจัดการหน้าต่างกราฟิกเพียงแค่บอกว่าไม่สามารถลบไฟล์ 'ชื่อไฟล์' @ Frédéric Hamidi ขอบคุณที่ช่วยฉันลบไฟล์เดียว แต่อีกอันที่มีชื่อ '? m? P ???)? m? P ???)' จะไม่ถูกลบ ... ข้อความแสดงข้อผิดพลาดแจ้งว่า "rm: ไม่สามารถลบ`? m? P ???)? m ? P ???) ': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว "
AK

1
@Aditya ไฟล์อื่นนั้นต้องมีอักขระที่ไม่สามารถพิมพ์ได้ในชื่อ ลองทำตามขั้นตอนต่อไปนี้: 1 / ย้ายไฟล์ที่ถูกต้องทั้งหมดออกจากโฟลเดอร์นั้น 2 / ปัญหาrm *ภายในโฟลเดอร์
Frédéric Hamidi

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

คำตอบ:


45

rm -i -- *จะแจ้งให้คุณลบแต่ละไฟล์ คุณสามารถและควรเปลี่ยน '*' เป็นการจับคู่ที่แคบลงหากมีไฟล์จำนวนมาก --หยุดตัวเลือกการประมวลผลเพื่อให้ไฟล์ชื่อ-dจะถูกลบออกจากrmการประสบความสำเร็จ

ฉันเคยใช้มันในอดีตและใช้งานได้จนกว่าคุณจะตีตัวละครพิเศษหรือ 2 อย่างที่มันไม่ชอบ


1
สิ่งนี้ใช้ไม่ได้กับไฟล์ชื่อ -d เช่น
SCO

2
@SCO หากไม่ได้ผลสำหรับคุณและขึ้นอยู่กับเวอร์ชันของrmคุณคุณสามารถทำได้rm -i -- * The --บอกบางเวอร์ชันของ rm ไม่มีสวิตช์บรรทัดคำสั่ง--อีกต่อไปหลังจากและเพื่อจัดการ args เป็นชื่อไฟล์ต่อไป
JimR

1
ฉันคิดว่าคำตอบนี้ควรรวมถึงความคิดเห็นที่แนะนำโดย @JimR: การใช้--ในrmคำสั่ง
Felipe Alvarez

16

คุณสามารถใช้ls -liเพื่อแสดงไฟล์ทั้งหมดโดย inode ของพวกเขา จากนั้นรันคำสั่งนี้เพื่อลบไฟล์:

find . -inum ${INODE_NUM} -delete

ฉันเพิ่มลง-maxdepth 1ในการค้นหาของฉันเพื่อความปลอดภัย:

find . -maxdepth 1 -inum ${INODE_NUM} -delete

1
พูดอย่างเคร่งครัดls -iดีพอ
สกอตต์

lsไม่ลบไฟล์ OP ต้องการสิ่งนี้
เฟลิเป้อัลวาเรซ

4
บรรทัดแรกของคำตอบของคุณบอกว่า“ คุณสามารถใช้ls -liเพื่อแสดงไฟล์ทั้งหมดด้วย inode ของพวกเขา” ฉันกำลังชี้ให้เห็นว่าls -iดีพอที่จะรับรายชื่อไฟล์และหมายเลข inode ที่เกี่ยวข้อง (แต่แน่นอนว่าคุณจำเป็นต้องมีls -iaถ้าคุณต้องการรวมไฟล์ดอท)
Scott

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