ลบหรือเปลี่ยนชื่อไฟล์ด้วย \ r เป็นชื่อไฟล์


11

ฉันมีไฟล์เล็ก ๆ ที่น่ารำคาญซึ่งชื่อดูเหมือนจะเป็นตัวอักษรเดียวและตัวละครนั้นเป็น \r

ฉันจะลบสิ่งนี้ได้อย่างไร

นี่คือสิ่งที่ฉันได้รับls -bl:

-rw-rwxr--+   1 root             snapplewriters        0 Aug 29  2011 \r

ls -l แค่แสดงมัน "?"


คุณจะจบลงด้วยไฟล์ที่ชื่อเช่นนั้นได้อย่างไร?
mkaito

คำตอบ:


17

เราls -liจะได้รับหมายเลข inode สำหรับไฟล์ (คอลัมน์แรก) จากนั้นใช้findเพื่อลบมัน (สมมติว่า inode คือ 12345):

find . -inum 12345 -exec rm -i {} \;


ขอบคุณ - สิ่งนี้มีประโยชน์มาก - ฉันรู้สึกว่าต้องมีระบบอ้างอิงบางอย่างที่ชัดเจนกับไฟล์ แต่ไม่สามารถหาได้ (เร็ว ๆ นี้)
โคลิน

1
findคุณสามารถทำได้เช่นกันfind . -inum 12345 -delete
William Jackson

สำหรับฉันยิ่งไม่เชื่อเรื่องพระเจ้ามากเท่าไหร่ก็ยิ่งดีเท่านั้น แต่ข้อเสนอแนะที่ดีไม่มีใครเลย :)
การ์เร็ต


5

ฉันจะไปถึง Python เป็นการส่วนตัว:

>>> import os
>>> '\r' in os.listdir('.')
True
>>> os.unlink('\r')

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

$ ls -b $'\r'
\r
$ rm -vi $'\r'
rm: remove regular empty file \r’? y
removed \r

ฉันคิดว่าคุณมีค้อนขนาดใหญ่อยู่ในห้องครัวของคุณหรือไม่ ในกรณีที่คุณต้องการแตกถั่วหรือไม่? :-)
mivk

3

อีกวิธีที่รวดเร็วในการลบไฟล์ที่เรียกว่า<carriage return>หากคุณใช้ Bash shell คือ:

$ rm <control-v><control-m>

2

ชื่อไฟล์อักขระเดี่ยวผิดปกติและหากคุณไม่มีไฟล์ดังกล่าวในไดเรกทอรีของคุณคุณสามารถลองทำสิ่งนี้:

rm ?

ฉันขี้เกียจเกินไปที่จะเรียนรู้หรือค้นหาวิธีอ้างอิงตัวละครแปลก ๆ ดังนั้นฉันจึงใช้ตัวแปรหลายครั้งเมื่อฉันติดกับไฟล์ที่มีชื่อยาก


-1 นี้ตรงกับทุกไฟล์ที่มีชื่อตัวเดียว - ดู "ชื่อเส้นทางการขยายตัว" man bashใน ลองtouch a b c d $'\r'; rm ?
l0b0

1
@ l0b0: ใช่ไหม อย่างที่ฉันเขียนชื่อไฟล์ตัวละครเดี่ยวนั้นผิดปกติ มีความเป็นไปได้ค่อนข้างมากที่ไม่มีไฟล์ดังกล่าวในไดเรกทอรีและในกรณีนี้ใช้งานได้ มิฉะนั้น "rm -i?" สามารถใช้ได้.
โทมัส Padron-McCarthy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.