Зовнішній диск, не може спорожнити кошик, 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 directory, те саме, що rm -i *.mp3.

  • Файл не Unicode - UTF-8знайдеться в Finder, це заплутана частина, незалежно від того, який термінал може мати проблема відображення назви файлів (я завжди налаштовував його на використання ), я думаю, що в ньому є більше сили.

У відповідь на запитання, ні, 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
Чи обмірковували ви створити резервну копію всіх речей, які ви хочете - ймовірно, вже все-таки створили резервну копію ... потім повністю переформатувати цей диск для початку?
Сонячний Майк

Чи має ls -bпоказати файл? Якщо це так, ви можете ls -biотримати inode та слідувати відповіді нижче, або по черзі просто скопіювати ім'я файлу у -bвисновку.
Рейд

Я вважаю, що основна проблема полягає не в імені файлу, ls -bi *.mp3показуйте той же результат, що і в OP.
bitinn

Відповіді:


10

Здається, що проблема викликана файлом з назвою 03 - 3lud.mp3, який знаходиться в папці з іменем .

Оскільки Terminal.app не в змозі надати діакритичні позначки у назвах файлів - добре, це є, але це виходить за рамки надання найпростішого рішення для вас - він приховує свою невдачу, приховавши ім’я файлу (щось, що невідомо мені раніше ; можливо, зміни його High Sierra на /.file, /.volfs та 64-бітні індекси? Зачекайте - неважливо; ваша редакція вашого питання скажіть мені, що я вас зрозумів неправильно.) У будь-якому разі існування файлу відомо поряд із іронічним. твердження Шукача, що його не існує. Очевидно, що це робить. Ось як це змінити:

Спочатку визначте номер inode файла. У Terminal.app, cdдо каталогу "папка" і видайте цю команду:ls -i *.mp3

Скопіюйте числовий рядок вводу, який міститься у лівій колонці відповіді, яка буде щось подібне

12345678 03 - E ̄lusion.mp3

--і введіть його в цю команду, яка перейменовано її на те, що термінал може візуалізувати правильно:

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

- даючи вам файл "deletemenow" у папці "папка", обидва ви можете розпоряджатися будь-яким способом, який найкраще відповідає вашим фантазії.


Ого, це вражаюче жахлива помилка.
chrylis

2
Я не думаю, що це точно. Термінал може приховати окремі символи, які він не може видати, але він не видалить увесь рядок тексту.
сутінки -наактивне-

1
@duskwuff У будь-якому випадку здається, що ім'я файлу викликає проблеми, тому це потенційне рішення незалежно.
JAB

Вибачте, але питання здається складнішим, ніж це: я спробував $ ls -i *.mp3, він повертається ls: 03 - Ēlusion.mp3: No such file or directory.
bitinn

1
Чи можете ви просто запустити ls -iвсередині каталогу, щоб не допустити перешкод розширення шаблону шаблону?
nohillside

9

Мені знадобилося багато часу, щоб прийти до цього резюме, але я думаю, що це остаточна відповідь.

Причина мого питання - добре відома :

OS X є незвичайним, як в тому, що він нормалізує назви файлів, так і тим, що він використовує NFD замість більш поширених NFC .

Історично (не така стара, до 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 (оскільки це єдиний крос-macOS / формат Windows з підтримкою розміру 4 ГБ + розмір файлу): macOS 10.13 якось вважають, що ваш файл повинен бути у форматі NFC, тому воно вирвалось.

Насправді, ось швидкий тест, у мене на папці 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. Або це...?
Док Г.

1
@DocG. це питання трохи складніше, ніж я спочатку думав, але я знову оновив свою відповідь!
bitinn

Так, я думав, що ти можеш це зробити. Дивіться мої попередні коментарі щодо Error 36та виконайте пошук в Інтернеті на кшталт "переміщення файлів назад та назад Windows mac error 36" для отримання додаткової інформації про розділення атрибуцій файлів у системах, що не належать до HFS. Це була (ще одна) відома проблема іменування файлів MacOS / OS X з моменту появи системи 10.6. Між нормалізацією Unicode і розділенням атрибута dot_underscore ви відчули подвійну помилку. Я сумніваюся, чи команда dot_clean мала шанс.
Док Г.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.