Drive Eksternal, tidak dapat mengosongkan tempat sampah, rm melihat file, tetapi ls -la tidak

9

Saya sedang membersihkan folder musik di drive eksternal saya dan menemukan direktori yang tidak dapat saya hapus apa pun yang saya coba.

Jika saya memasukkannya ke tempat sampah melalui GUI

Operasi tidak dapat diselesaikan karena item "folder" sedang digunakan.

Jika saya gunakan rm -rfuntuk menghapusnya melalui terminal

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

Jika saya gunakan ls -launtuk memeriksa isinya

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

Jika saya gunakan rm -i *di dalam folder

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

Jika saya gunakan sudo lsof +D folder/untuk memeriksa apakah ada file yang dibuka

Tidak ada yang kembali saat keluar dari program.

Jika saya menggunakan Disk Utility untuk memperbaiki (pertolongan pertama) disk dan volume

Pemeriksaan kesehatan berlalu sehingga tidak ada perbaikan yang dimulai.

Jika saya reboot macOS

Masalahnya masih ada.

Informasi tambahan:

  • Saya dapat memindahkan folder di dalam drive, tetapi tidak ke drive lain.

  • Saya bisa mengganti nama folder.

  • ls -i *.mp3kembali ls: 03 - Ēlusion.mp3: No such file or directory, sama dengan rm -i *.mp3.

  • File tidak muncul di Finder, itu bagian yang membingungkan, apa pun masalah tampilan nama file Terminal bisa (saya selalu mengatur untuk menggunakan Unicode - UTF-8), saya pikir ada kekuatan yang lebih berperan.

Menanggapi pertanyaan, tidak, ls -ibtidak mengembalikan apa pun.

$ 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 ..

Jadi ternyata ada sesuatu di dalamnya tetapi ls -latidak bisa melihatnya, sementara rm -ianeh dengan nama file?

get info melalui menu konteks GUI memang mengkonfirmasi ada 1 item dalam folder, tetapi dengan nol byte, dan tentu saja tidak muncul di finder.

Saya tidak yakin apa yang harus dilakukan pada saat ini. Bantuan sangat dihargai!

(Menggunakan 10.13.4 + ExFAT pada drive eksternal)

bitinn
sumber
1
Sudahkah Anda mempertimbangkan untuk mencadangkan semua hal yang Anda inginkan - mungkin sudah dicadangkan ... kemudian memformat ulang drive itu untuk memulai lagi?
Solar Mike
Apakah ls -bmenunjukkan file? Jika demikian, Anda bisa ls -bimendapatkan inode dan ikuti jawaban di bawah ini, atau secara bergantian cukup salin nama file di -boutput.
Reid
Saya percaya masalah inti bukan dengan nama file, ls -bi *.mp3tampilkan hasil yang sama seperti yang ditunjukkan pada OP.
bitinn

Jawaban:

10

Masalahnya tampaknya disebabkan oleh file bernama 03 - Ēlusion.mp3 yang terletak di dalam folder bernama direktori .

Karena Terminal.app tidak dapat membuat tanda diakritik dalam nama file - well, memang, tapi itu di luar ruang lingkup memberikan solusi paling sederhana untuk Anda - ia menyembunyikan kegagalannya dengan menyembunyikan nama file (sesuatu yang belum pernah saya dengar sebelumnya sekarang) ; mungkin perubahan High Sierra-nya ke /.file, /.volfs dan 64-bit inode? Tunggu-- tidak apa-apa; edit Anda untuk pertanyaan Anda memberi tahu saya salah paham dengan Anda.) Lagi pula, keberadaan file diketahui, bersama dengan ironisnya anggapan oleh Finder bahwa itu tidak ada. Jelas itu terjadi. Berikut cara mengubahnya:

Pertama, tentukan nomor inode file. Di Terminal.app, cdke direktori "folder" dan berikan perintah ini:ls -i *.mp3

Salin string nomor dari inode yang disediakan di kolom sebelah kiri dari respons, yang akan menjadi seperti itu

12345678 03 - E ̄lusion.mp3

--dan menaruhnya di perintah ini, yang akan mengubahnya menjadi sesuatu yang terminal dapat render dengan benar:

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

--memberikan Anda file "deletemenow" di folder "folder," yang keduanya dapat Anda buang dengan cara apa pun yang paling sesuai dengan keinginan Anda.

Doc G.
sumber
Wow, itu bug yang sangat buruk.
chrylis
2
Saya rasa ini tidak akurat. Terminal mungkin menyembunyikan satu karakter yang tidak dapat diurai, tetapi tidak akan menghapus seluruh baris teks.
duskwuff
1
@duskwuff Either way sepertinya nama file yang menyebabkan masalah, jadi ini adalah solusi potensial.
JAB
Maaf, tetapi masalahnya tampaknya lebih kompleks dari ini: Saya mencoba $ ls -i *.mp3, ia kembali ls: 03 - Ēlusion.mp3: No such file or directory.
bitinn
1
Bisakah Anda hanya menjalankan ls -idalam direktori untuk mencegah ekspansi wildcard shell mengganggu?
nohillside
9

Butuh waktu lama bagi saya untuk sampai pada ringkasan ini, tetapi saya pikir itu adalah jawaban yang pasti.

Penyebab masalah saya adalah yang terkenal :

OS X adalah yang aneh, baik karena menormalkan nama file dan menggunakan NFD alih-alih NFC yang lebih umum .

Secara historis (tidak setua itu, era sebelum 10.11), OS X + HFS + memberlakukan formulir NFD pada semua nama file , dan Anda hanya akan mendapatkan hasil NFD dari perintah dan panggilan sistem.

Kemudian segalanya mulai berubah, pada 10.11, beberapa hasil panggilan sistem dinormalisasi ke NFC , yang membuatnya sejajar dengan Windows dan Linux, tetapi dengan mengorbankan beberapa program yang mengharapkan NFD pada OS X.

Tetapi sejak diperkenalkannya macOS 10.13 + AFPS, perilaku berubah lagi: Apple memutuskan ingin menormalkan kembali ke NFD pada tampilan dan panggilan sistem , tetapi biarkan nama file aslinya apa adanya (sehingga NFC dan NFD didukung, tetapi jika Anda memilih nama file di Finder atau salin lshasil di Terminal, Anda mendapatkan formulir NFD).

Ini semua hebat, sampai Anda meletakkan file dengan nama file NFD di drive eksternal menggunakan exFAT (karena itu satu-satunya format cross-macOS / Windows dengan dukungan ukuran file 4GB +): macOS 10.13 entah bagaimana percaya file Anda harus dalam format NFC, jadi itu disadap.

Sebenarnya, ini adalah tes cepat, saya memiliki folder di Windows pada drive exFAT saya dengan 3 file:

masukkan deskripsi gambar di sini

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

(Anda dapat menyalin kode kunci yang tepat di sini )

Ketika saya memasangnya di macOS saya, inilah yang saya lihat:

masukkan deskripsi gambar di sini

dan ls -laibhasil:

$ 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

Seperti yang Anda lihat, file NFC ada tetapi file NFD hilang.

Bahkan jika Anda mengetahui masalah NFC / NFD pada OS X , Anda mungkin tidak mengharapkan drive eksternal exFAT untuk menghadapi masalah ini dengan cara yang berlawanan (NFC baik-baik saja, tetapi NFD sedang terengah-engah).

Tapi apa yang bisa menyebabkan file musik saya menggunakan nama file NFD di tempat pertama:

  • Saya awalnya mengunduh file musik ini pada 10.9 / 10.10 dengan Mac yang lebih lama, yang memberlakukan nama file NFD.
  • Pada titik tertentu saya memindahkannya ke drive Windows + NTFS, yang tidak menegakkan NFC / NFD, jadi nama file NFD asli dipertahankan.
  • Sekarang saya ingin memindahkan file ini kembali ke macOS saya 10.13 + APFS menggunakan drive exFAT (exFAT mendukung konvensi UTF-16 yang sama dengan NTFS).
  • Neraka lepas.

Saya bisa menyalin file melalui drive jaringan atau TeamViewer, dan itu akan baik-baik saja, tetapi exFAT memicu bug ini di macOS.

Pelajaran:

  • Nama file Unicode masih menjadi ancaman.
  • Anda sebenarnya membutuhkan Windows / Linux untuk memperbaiki masalah ini (jika situasinya file Anda berada pada drive eksternal exFAT).
bitinn
sumber
@bitlinn: Klik tautan kedua di komentar saya yang ditujukan ke duskwulff dan coba alat normalisasi unicode Apfelstrudel yang akan Anda temukan di sana. Sangat berguna untuk APFS, tidak ada gunanya dengan exFAT. Atau itu...?
Doc G.
1
@DocG. masalah ini sedikit lebih rumit dari yang saya kira, tetapi saya telah memperbarui jawaban saya, lagi!
bitinn
Ya, saya pikir Anda mungkin akhirnya melakukan itu. Lihat komentar saya sebelumnya tentang Error 36dan melakukan pencarian web untuk sesuatu seperti "memindahkan file bolak-balik windows mac error 36" untuk informasi lebih lanjut tentang memisahkan atribusi file pada sistem non-HFS. Ini telah (lain) dikenal masalah penamaan file MacOS / OS X sejak Sistem 10.6 tiba. Antara normalisasi Unicode dan pemisahan atribut dot_underscore, Anda mengalami heck bug ganda. Saya ragu apakah perintah dot_clean memiliki peluang.
Doc G.