ไดรฟ์ภายนอกไม่สามารถล้างข้อมูลในถังขยะได้ rm เห็นไฟล์ แต่ ls -la ไม่ได้


9

ฉันกำลังล้างโฟลเดอร์เพลงในไดรฟ์ภายนอกและพบไดเรกทอรีที่ฉันไม่สามารถลบได้ไม่ว่าฉันจะพยายามทำอะไร

ถ้าฉันใส่ไว้ในถังขยะผ่าน GUI

ไม่สามารถดำเนินการให้เสร็จสมบูรณ์ได้เนื่องจากมีการใช้งานรายการ“ โฟลเดอร์”

ถ้าฉันใช้rm -rfเพื่อลบมันผ่านทางขั้ว

$ rm -rf folder/
rm: folder/: Directory not empty

ถ้าฉันใช้ls -laเพื่อตรวจสอบเนื้อหา

$ ls -la
total 512
drwxrwxrwx  1 user  staff  131072 Jan  3  2017 .
drwxrwxrwx  1 user  staff  131072 Jan  3  2017 ..

ถ้าฉันใช้rm -i *ภายในโฟลเดอร์

$ rm -i *
rm: 03 - Ēlusion.mp3: No such file or directory

ถ้าฉันใช้sudo lsof +D folder/เพื่อตรวจสอบว่ามีไฟล์ใด ๆ ที่เปิดอยู่

ไม่มีอะไรส่งคืนเมื่อออกจากโปรแกรม

ถ้าฉันใช้ Disk Utility เพื่อซ่อมแซมดิสก์ (และการปฐมพยาบาล) และโวลุ่ม

การตรวจสุขภาพผ่านไปจึงไม่ได้ทำการซ่อมแซม

ถ้าฉันรีบูท macOS

ปัญหายังคงมีอยู่

ข้อมูลเพิ่มเติม:

  • ฉันสามารถย้ายโฟลเดอร์ภายในไดรฟ์ แต่ไม่ไปยังไดรฟ์อื่น

  • ฉันสามารถเปลี่ยนชื่อโฟลเดอร์ได้

  • ls -i *.mp3ผลตอบแทนเช่นเดียวกับls: 03 - Ēlusion.mp3: No such file or directoryrm -i *.mp3

  • ไฟล์ไม่แสดงขึ้นใน Finder นั่นเป็นส่วนที่ทำให้เกิดความสับสนไม่ว่าจะมีปัญหาอะไรในการแสดงชื่อไฟล์เทอร์มินัล (ฉันตั้งไว้ให้ใช้เสมอUnicode - UTF-8) ฉันคิดว่ามันมีพลังมากกว่า

เพื่อตอบคำถาม nope ls -ibจะไม่ส่งคืนสิ่งใด

$ ls -i
$ ls -ib
$ ls -laib
total 512
2762318 drwxrwxrwx  1 user  staff  131072 Jan  3  2017 .
2685260 drwxrwxrwx  1 user  staff  131072 Jan  3  2017 ..

เห็นได้ชัดว่ามีบางอย่างในนั้น แต่ls -laมองไม่เห็นในขณะที่rm -iกำลังแปลกกับชื่อไฟล์?

get info ผ่านเมนูบริบท GUI ยืนยันว่ามี 1 รายการในโฟลเดอร์ แต่มีศูนย์ไบต์และแน่นอนไม่ปรากฏในตัวค้นหา

ฉันไม่แน่ใจว่าจะทำอย่างไรในจุดนี้ ช่วยชื่นชมมาก!

(ใช้ 10.13.4 + ExFAT บนไดรฟ์ภายนอก)


1
คุณได้พิจารณาการสำรองข้อมูลทุกอย่างที่คุณต้องการแล้วอาจสำรองไว้แล้ว ... จากนั้นจึงฟอร์แมตไดรฟ์ใหม่เพื่อเริ่มต้นใหม่ทั้งหมดหรือไม่
Solar Mike

ไม่ls -bแสดงไฟล์หรือไม่ ถ้าเป็นเช่นนั้นคุณสามารถls -biรับ inode และทำตามคำตอบด้านล่างหรือเพียงคัดลอกชื่อไฟล์ใน-bผลลัพธ์
Reid

ฉันเชื่อว่าปัญหาหลักไม่ได้อยู่กับชื่อไฟล์ls -bi *.mp3แสดงผลลัพธ์เดียวกับที่แสดงใน OP
bitinn

คำตอบ:


10

ปัญหาที่เกิดขึ้นดูเหมือนจะเกิดจากไฟล์ชื่อ03 - Ēlusion.mp3อยู่ในสารบบชื่อโฟลเดอร์

เนื่องจาก Terminal.app ไม่สามารถแสดงเครื่องหมายกำกับออกเสียงในชื่อไฟล์ได้ แต่มันอยู่นอกเหนือขอบเขตของการให้บริการโซลูชันที่ง่ายที่สุดสำหรับคุณ - ซ่อนความล้มเหลวโดยซ่อนชื่อไฟล์ (บางสิ่งที่ไม่เคยได้ยินมาก่อนจากฉัน บางทีการเปลี่ยนแปลงของ High Sierra เป็น /.file, /.volfs และ inodes 64 บิตรอสักครู่ - ไม่เป็นไรการแก้ไขคำถามของคุณบอกฉันว่าฉันเข้าใจคุณผิด) อย่างไรก็ตามการมีอยู่ของไฟล์เป็นที่รู้จัก การโต้แย้งโดย Finder ว่าไม่มีอยู่ เห็นได้ชัดว่ามันทำ นี่คือวิธีการเปลี่ยนแปลง:

ก่อนอื่นให้กำหนดหมายเลขไอโหนดของไฟล์ ใน Terminal.app cdไปที่ไดเรกทอรี "โฟลเดอร์" และออกคำสั่งนี้:ls -i *.mp3

คัดลอกสตริงตัวเลขของ inode ที่ให้ไว้ในคอลัมน์ซ้ายมือของการตอบสนองซึ่งจะมีลักษณะดังนี้

12345678 03 - E ̄lusion.mp3

- และวางไว้ในคำสั่งนี้ซึ่งจะเปลี่ยนชื่อเป็นสิ่งที่เทอร์มินัลสามารถแสดงผลได้อย่างถูกต้อง:

find . -inum 12345678 -exec mv {} deletemenow \;

- ขอให้คุณใช้ไฟล์ "ลบ" ออกจากโฟลเดอร์ "โฟลเดอร์" ซึ่งทั้งสองอย่างนี้อาจจะกำจัดสิ่งที่เหมาะสมที่สุดสำหรับคุณ


ว้าวนั่นเป็นข้อผิดพลาดที่น่าประทับใจมาก
chrylis -on strike-

2
ฉันไม่คิดว่ามันถูกต้อง เทอร์มินัลอาจซ่อนอักขระเดี่ยวที่ไม่สามารถแสดงผลได้ แต่จะไม่ลบข้อความทั้งหมด
duskwuff -inactive-

1
@duskwuff ไม่ว่าด้วยวิธีใดดูเหมือนว่าชื่อไฟล์เป็นสาเหตุของปัญหาดังนั้นนี่จึงเป็นคำตอบที่อาจเกิดขึ้นได้
JAB

ขออภัย แต่ปัญหาดูเหมือนซับซ้อนมากขึ้นกว่านี้: ฉันพยายามที่จะส่งกลับ$ ls -i *.mp3 ls: 03 - Ēlusion.mp3: No such file or directory
bitinn

1
คุณสามารถเรียกใช้ls -iภายในไดเรกทอรีเพื่อป้องกันการขยายตัวของสัญลักษณ์แทนเชลล์ได้หรือไม่
nohillside

9

ฉันใช้เวลานานกว่าจะมาถึงบทสรุปนี้ แต่ฉันคิดว่ามันเป็นคำตอบที่ชัดเจน

สาเหตุของปัญหาของฉันเป็นที่รู้จักกันดี :

OS X เป็นคี่หนึ่งออกมาทั้งในการที่จะ normalizes ชื่อไฟล์และในการที่จะใช้ NFD แทนของเอ็นเอฟซีร่วมกันมากขึ้น

ในอดีต (ไม่ใช่ยุคก่อนยุค 10.11) OS X + HFS + บังคับใช้รูปแบบ NFD ในชื่อไฟล์ทั้งหมดและคุณจะได้รับผลลัพธ์ NFD จากคำสั่งและการเรียกใช้ระบบเท่านั้น

จากนั้นสิ่งต่าง ๆ ก็เริ่มเปลี่ยนไปใน 10.11 ผลการเรียกระบบบางอย่างถูกปรับให้เป็น NFCซึ่งทำให้มันสอดคล้องกับ Windows และ Linux แต่มีค่าใช้จ่ายในการทำลายบางโปรแกรมที่คาดว่า NFD บน OS X

แต่เนื่องจากมีการเปิดตัว macOS 10.13 + AFPS พฤติกรรมจะเปลี่ยนไปอีกครั้ง: Apple ตัดสินใจว่าจะต้องการทำให้ NFD กลับสู่ปกติบนหน้าจอและการโทรของระบบแต่ปล่อยชื่อไฟล์ดั้งเดิมตามเดิม (ดังนั้นทั้ง NFC และ NFD จึงรองรับ แต่ถ้าคุณเลือก ชื่อไฟล์ใน Finder หรือคัดลอกlsผลลัพธ์ใน Terminal คุณจะได้รับฟอร์ม NFD)

ทั้งหมดนี้ยอดเยี่ยมจนกระทั่งคุณใส่ไฟล์ที่มีชื่อไฟล์ NFD ในไดรฟ์ภายนอกโดยใช้ exFAT (เนื่องจากเป็นรูปแบบ cross-macOS / Windows ที่รองรับ 4GB + ขนาดไฟล์): macOS 10.13 เชื่อว่าไฟล์ของคุณต้องอยู่ในรูปแบบ NFC ดังนั้น มันบั๊กออกมา

อันที่จริงนี่คือการทดสอบอย่างรวดเร็วฉันมีโฟลเดอร์ใน Windows บนไดรฟ์ exFAT ที่มี 3 ไฟล์:

ป้อนคำอธิบายรูปภาพที่นี่

  • test.mp3
  • Ēlusion.mp3( Ēใน NFC)
  • 03 - Ēlusion( Ēใน NFD)

(คุณสามารถคัดลอกUnicode ที่แน่นอนที่นี่ )

เมื่อฉันติดตั้งบน macOS ของฉันนี่คือสิ่งที่ฉันเห็น:

ป้อนคำอธิบายรูปภาพที่นี่

และls -laibผลลัพธ์:

$ ls -laib
total 46592
2762318 drwxrwxrwx  1 user  staff    131072 Jan  3  2017 .
2685260 drwxrwxrwx  1 user  staff    131072 Jan  3  2017 ..
1572961 -rwxrwxrwx  1 user  staff  11672464 Aug 23  2014 Ēlusion.mp3
1572871 -rwxrwxrwx  1 user  staff  11672464 Aug 23  2014 test.mp3

อย่างที่คุณเห็นไฟล์ NFC มีอยู่ แต่ไฟล์ NFD หายไป

แม้ว่าคุณจะรับรู้ถึงปัญหาNFC / NFD บน OS Xคุณอาจไม่คาดว่า exFAT ไดรฟ์ภายนอกที่จะเผชิญกับปัญหานี้ในทางตรงกันข้าม (NFC ดี แต่ NFD นั้นเหนื่อยล้า)

แต่สิ่งที่อาจทำให้ไฟล์เพลงของฉันใช้ชื่อไฟล์ NFD ในตอนแรก:

  • เดิมทีฉันดาวน์โหลดไฟล์เพลงนี้ใน 10.9 / 10.10 กับ Mac รุ่นเก่าซึ่งบังคับใช้ชื่อไฟล์ NFD
  • เมื่อถึงจุดหนึ่งฉันก็ย้ายพวกมันออกไปที่ไดรฟ์ Windows + NTFS ซึ่งไม่บังคับใช้ NFC / NFD ดังนั้นชื่อไฟล์ NFD ดั้งเดิมจึงถูกสงวนไว้
  • ตอนนี้ฉันต้องการย้ายไฟล์นี้กลับไปที่ macOS 10.13 + APFS โดยใช้ไดรฟ์ exFAT (exFAT รองรับแบบแผน UTF-16 เดียวกับ NTFS)
  • นรกแตกหลวม

ฉันสามารถคัดลอกไฟล์ผ่านไดรฟ์เครือข่ายหรือ TeamViewer และมันก็ใช้ได้ แต่ exFAT กำลังเรียกใช้บั๊กนี้ใน macOS

บทเรียน:

  • ชื่อไฟล์ Unicode ยังคงเป็นภัยคุกคาม
  • คุณต้องใช้ Windows / Linux เพื่อแก้ไขปัญหานี้ (หากสถานการณ์ของคุณเป็นไฟล์ที่อยู่ในไดรฟ์ภายนอก exFAT)

@ bitlinn: คลิกที่ลิงค์ที่สองในความคิดเห็นของฉันจ่าหน้าถึง duskwulff และลองใช้เครื่องมือการฟื้นฟูของ Apfelstrudel unicode ที่คุณพบเจอ มีประโยชน์มากสำหรับ APFS ไม่มีจุดหมายกับ exFAT หรือว่า ...
Doc G.

1
@DocG ปัญหานี้ซับซ้อนกว่าที่ฉันคิดไว้เล็กน้อย แต่ฉันได้อัปเดตคำตอบอีกครั้งแล้ว!
bitinn

ใช่ฉันคิดว่าคุณอาจจะทำอย่างนั้น ดูความคิดเห็นก่อนหน้าของฉันเกี่ยวกับError 36และทำการค้นหาเว็บสำหรับบางอย่างเช่น "ย้ายไฟล์ไปมา windows mac error 36" สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการแยกไฟล์ที่มากับระบบที่ไม่ใช่ HFS ปัญหานี้เป็นปัญหาการตั้งชื่อไฟล์ MacOS / OS X ที่รู้จักกันดีตั้งแต่ระบบ 10.6 มาถึง ระหว่าง Unicode Normalization และการแยกแอตทริบิวต์ dot_underscore คุณพบ heck ของบั๊กสองครั้ง ฉันสงสัยว่าคำสั่ง dot_clean มีโอกาสหรือไม่
Doc G.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.