มีไฟล์ชื่อ ~ (tilde) ในโฮมไดเร็กตอรี่ของฉัน


46

ฉันเพิ่งสังเกตเห็นว่าฉันมีไฟล์ที่เรียกว่า~ใน~ไดเรกทอรีของฉัน

$ ls -la ~
...
-rw-r-----  1 x1 x1  733962240 Mar  1 17:55 ~
...

ความคิดใดที่ฉันสามารถmvหรือrmมันได้หรือไม่


ลองลบโดย i-node
gronostaj

คำตอบ:


55

ทางออกที่ดีที่สุดสวยเมื่อมาถึงไฟล์ที่ไม่สามารถลบได้ด้วยวิธีปกติ:

ls -il 

คอลัมน์แรกจะแสดงหมายเลขไอโหนดของไฟล์

find . -inum [inode-number] -exec rm -i {} \;

การดำเนินการนี้จะลบไฟล์พร้อมหมายเลข inode ที่ระบุหลังจากการตรวจสอบ


สิ่งนี้ใช้ได้ผล บางทีการแก้ปัญหาโดย rici ก็ดีเหมือนกัน แต่ฉันก็ไม่ได้ลอง ขอบคุณมาก!
scrrr

ใช่คำตอบของ Rici ก็ดีเหมือนกัน และฉันคิดว่ามันดีกว่าเพราะมันง่ายกว่า
Andrey Regentov

ดี +1 ฉันเปลี่ยนคำตอบของคุณให้ใช้-deleteแทน-execแล้วก็รู้ว่าคุณกำลังใช้rm -iซึ่งเป็นความคิดที่ดีดังนั้นฉันจึงย้อนกลับ ขอโทษ
terdon

ไม่ต้องกังวล มักจะดีใจเมื่อมีคนเห็นว่าคำตอบของฉันที่คุ้มค่าของเวลาของพวกเขา :)
Squeezy

คำตอบนี้ไม่ได้ผลสำหรับฉัน Ubuntu 14.04 LTS
Rexford

45

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


17
อีกทั้งไปที่โฟลเดอร์และrm ./~ด้วยเหตุผลเดียวกันกับที่คุณพูด
Carlos Campderrós

@ CarlosCampderrósพิจารณาคำตอบนั้นแล้ว ฉันจะคิดว่ามันเป็น "ดีที่สุด" และวิธีการแก้ปัญหาตรงไปตรงมามากที่สุดเมื่อเทียบกับคำตอบอื่น ๆ ตั้งแต่./~แท้จริงหมายถึง"ไฟล์หรือโฟลเดอร์ที่มีชื่อ~ในไดเรกทอรีปัจจุบัน" ไม่มีแฮ็กอย่างอักขระ escape หรือการอ้างอิง inode
ADTC

@ADTC: เพื่อป้องกันคำตอบของฉันมันไม่จำเป็นต้องเปลี่ยน CWD ในขณะที่ใช้./~ทำ หลังจากห้าปีที่ผ่านมาความทรงจำของฉันเลือนเล็กน้อย แต่ฉันคิดว่านั่นเป็นสาเหตุที่ฉันแนะนำ~/~มากกว่าปกติ./~: คำถามนี้อ้างถึง "ไฟล์ที่มีชื่อ~ในโฮมไดเร็กตอรี่ [OP's] "; ไม่ใช่ "ในไดเรกทอรีปัจจุบัน"
rici

@rici นั่นสมเหตุสมผลแล้วและในบริบทของคำถามมันก็เหมาะสมแล้ว แต่ฉันชอบที่จะเห็นคำตอบที่เป็นเรื่องทั่วไปหรือพูดโดยทั่วไปก่อนที่จะอธิบายเพิ่มเติมในกรณีเฉพาะของคำถาม นั่นคือการป้องกันของฉัน: D
ADTC

20

อ้างถึง ( rm '~') หรือหลบหนี ( rm \~)


มันมักจะเป็นหนึ่งในนั้น (เช่นสำหรับเช่น$) หรือเพิ่ม--เพื่อป้องกันชื่อไฟล์จากการถูกตีความว่าเป็นข้อโต้แย้ง: rm -- -iลบไฟล์ชื่อ-i; ยังมีประโยชน์rm -- *เมื่อคุณต้องการลบไฟล์ทั้งหมดในไดเรกทอรีปัจจุบัน: ไม่มีอุบัติเหตุrm -f *เพียงเพราะไฟล์มีชื่อเช่นนั้น


หืมดูเหมือนจะไม่ทำงาน .. ฉันลองใส่เครื่องหมายอัญประกาศเดียวการหลบหนีและการตีย้อนหลัง .. เขาไม่ได้หยิบไฟล์ กล่าวว่าทั้งสองก็ไม่ได้อยู่หรือตีความ ~ เป็นบ้านไดเรกทอรี ..
scrrr

@scrrr เปลือกของคุณคืออะไร?
แดเนียลเบ็ค

ทุบตี. แต่ปัญหาแก้ไขวิธี inode
scrrr

@scrrr ดีใจที่ปัญหาของคุณได้รับการแก้ไข แต่ตอนนี้ฉันต้องการทราบว่าเหตุใด bash escapes จึงไม่ทำงานในระบบของคุณแบบเดียวกับที่ฉันทำ
Isaac Rabinovitch

1
ระมัดระวัง --เพียงหยุดอาร์กิวเมนต์ต่อไปนี้ที่ถูกตีความว่าเป็นพารามิเตอร์ - มันไม่ได้ป้องกันเชลล์จากการดำเนินการขยายตัว (เช่น*) ซึ่งเป็นสิ่งที่เกิดขึ้นที่นี่ (ฉันรู้ว่าคุณแนะนำว่ามันเป็นทางเลือกสำหรับสถานการณ์อื่น ๆ แต่คำเตือนจะดี)
Bob
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.