Unidad externa, no puede vaciar la basura, rm ve un archivo, pero ls -la no

9

Estaba borrando una carpeta de música en mi disco externo y encontré un directorio que no puedo eliminar sin importar lo que intente.

Si lo pongo en la papelera a través de GUI

La operación no se puede completar porque el elemento "carpeta" está en uso.

Si uso rm -rfpara eliminarlo a través de la terminal

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

Si uso ls -lapara verificar su contenido

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

Si uso rm -i *dentro de la carpeta

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

Si uso sudo lsof +D folder/para verificar si hay archivos abiertos

Nada vuelve al salir del programa.

Si uso Disk Utility para reparar (primeros auxilios) el disco y el volumen

Verificación de salud aprobada, por lo que no se inició ninguna reparación.

Si reinicio macOS

El problema persiste.

Información adicional:

  • Puedo mover la carpeta dentro de la unidad, pero no a otra unidad.

  • Puedo cambiar el nombre de la carpeta.

  • ls -i *.mp3vuelve ls: 03 - Ēlusion.mp3: No such file or directory, igual que rm -i *.mp3.

  • El archivo no aparece en Finder, es una parte confusa, cualquiera que sea el problema de visualización del nombre de archivo que pueda tener el Terminal (siempre lo configuro para usar Unicode - UTF-8), creo que hay más fuerza en juego.

En respuesta a las preguntas, ls -ibno , no devuelve nada.

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

Entonces, aparentemente hay algo en él, pero ls -lano podía verlo, mientras que rm -ies extraño con el nombre de archivo.

get info a través del menú contextual de la GUI confirmó que hay 1 elemento en la carpeta, pero con cero bytes, y ciertamente no aparece en el buscador.

No estoy seguro de qué hacer en este momento. Ayuda muy apreciada!

(Usando 10.13.4 + ExFAT en unidad externa)

bitinn
fuente
1
¿Ha considerado hacer una copia de seguridad de todo lo que desea, probablemente ya haya hecho una copia de seguridad de todos modos ... y luego volver a formatear completamente esa unidad para comenzar de nuevo?
Solar Mike
¿ ls -bMuestra el archivo? Si es así, puede ls -biobtener el inodo y seguir la respuesta a continuación, o alternativamente simplemente copiar el nombre del archivo en la -bsalida.
Reid
Creo que el problema principal no es con el nombre de archivo, ls -bi *.mp3muestra el mismo resultado que se muestra en OP.
bitinn

Respuestas:

10

El problema parece ser causado por un archivo llamado 03 - Ēlusion.mp3 ubicado dentro de la carpeta llamada directorio .

Debido a que Terminal.app no ​​puede representar marcas diacríticas en los nombres de archivo, bueno, lo es, pero eso está más allá del alcance de proporcionar la solución más simple para usted, oculta su falla al ocultar el nombre de archivo (algo que hasta ahora no había escuchado). ; ¿quizás los cambios de High Sierra a /.file, /.volfs e inodos de 64 bits? Espera, no importa; tu edición de tu pregunta me dice que te malinterpreté.) De todos modos, la existencia del archivo es conocida, junto con la ironía. afirmación del Buscador de que no existe. Obviamente lo hace. Aquí se explica cómo cambiar eso:

Primero, determine el número de inodo del archivo. En Terminal.app, cdal directorio "carpeta" y emita este comando:ls -i *.mp3

Copie la cadena numérica del inodo proporcionada en la columna de la izquierda de la respuesta, que será algo así como

12345678 03 - E ̄lusion.mp3

--y colóquelo en este comando, que lo cambiará a algo que el terminal pueda representar correctamente:

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

- dándole el archivo "deletemenow" en la carpeta "folder", que puede desechar de la manera que más le convenga.

Doc G.
fuente
Wow, ese es un error impresionantemente terrible.
chrylis -on strike-
2
No creo que esto sea exacto. El terminal puede ocultar caracteres individuales que no puede representar, pero no eliminará toda la línea de texto.
duskwuff -inactive-
1
@duskwuff De cualquier manera, parece que el nombre de archivo está causando problemas, por lo que esta es una solución potencial independientemente.
JAB
Lo sentimos, pero el problema parece más complejo que esto: lo intenté $ ls -i *.mp3, vuelve ls: 03 - Ēlusion.mp3: No such file or directory.
bitinn
1
¿Se puede ejecutar ls -identro del directorio para evitar que interfiera la expansión del comodín de shell?
nohillside
9

Me llevó mucho tiempo llegar a este resumen, pero creo que es la respuesta definitiva.

La causa de mi problema es bien conocida :

OS X es el extraño, tanto en que normaliza los nombres de archivo como en que usa NFD en lugar del NFC más común .

Históricamente (no tan antiguo, anterior a la era 10.11), OS X + HFS + aplica el formulario NFD en todos los nombres de archivo , y solo obtendrá resultados NFD de comandos y llamadas al sistema.

Luego, las cosas comienzan a cambiar, en 10.11, algunos resultados de llamadas al sistema se normalizan a NFC , lo que lo pone en línea con Windows y Linux, pero a expensas de romper algunos programas que esperan NFD en OS X.

Pero desde la introducción de macOS 10.13 + AFPS, el comportamiento cambia nuevamente: Apple decide que quiere normalizarse a NFD en la pantalla y las llamadas del sistema , pero deja los nombres de archivo originales tal como están (por lo tanto, NFC y NFD son compatibles, pero si selecciona el nombre de archivo en Finder o el lsresultado de la copia en Terminal, obtienes el formulario NFD).

Todo esto es genial, hasta que coloque un archivo con nombre de archivo NFD en una unidad externa usando exFAT (ya que es el único formato cross-macOS / Windows con soporte de tamaño de archivo 4GB +): macOS 10.13 de alguna manera cree que su archivo debe estar en formato NFC, por lo que se salió.

De hecho, aquí hay una prueba rápida, tengo una carpeta en Windows en mi unidad exFAT con 3 archivos:

ingrese la descripción de la imagen aquí

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

(Puede copiar el Unicode exacto aquí )

Cuando los monte en mi macOS, esto es lo que veo:

ingrese la descripción de la imagen aquí

y ls -laibresultado:

$ 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

Como puede ver, el archivo NFC está presente pero falta el archivo NFD.

Incluso si conoce el problema de NFC / NFD en OS X , es posible que no espere que la unidad externa exFAT enfrente este problema de la manera opuesta (NFC está bien, pero NFD está en llamas).

Pero, en primer lugar, qué pudo haber hecho que mi archivo de música usara el nombre de archivo NFD:

  • Originalmente descargué este archivo de música en 10.9 / 10.10 con una Mac anterior, que aplica el nombre de archivo NFD.
  • En algún momento los muevo a una unidad de Windows + NTFS, que no aplica NFC / NFD, por lo que se conserva el nombre de archivo NFD original.
  • Ahora quiero mover este archivo nuevamente a mi macOS 10.13 + APFS usando una unidad exFAT (exFAT admite la misma convención UTF-16 que NTFS).
  • El infierno se desata.

Podría haber copiado el archivo a través de una unidad de red o TeamViewer, y estaría bien, pero exFAT está activando este error en macOS.

Lecciones

  • El nombre de archivo Unicode sigue siendo una amenaza.
  • En realidad, necesita un Windows / Linux para solucionar este problema (si la situación es que su archivo está en una unidad externa exFAT).
bitinn
fuente
@bitlinn: haga clic en el segundo enlace en mi comentario dirigido a duskwulff y pruebe la herramienta de normalización Unicode de Apfelstrudel que encontrará allí. Muy útil para APFS, sin sentido con exFAT. O es eso...?
Doc G.
1
@DocG. Este problema es un poco más complejo de lo que pensé inicialmente, ¡pero he actualizado mi respuesta nuevamente!
bitinn
Sí, pensé que podrías terminar haciendo eso. Vea mi comentario anterior Error 36y haga una búsqueda en la web para algo como "mover archivos de Windows Mac al error 36" para obtener más información sobre cómo separar las atribuciones de archivos en sistemas que no son HFS. Este ha sido (otro) problema conocido de nombres de archivos de MacOS / OS X desde que llegó el Sistema 10.6. Entre la normalización Unicode y la separación de atributos dot_underscore, experimentaste un gran error doble. Dudo que el comando dot_clean tuviera alguna posibilidad.
Doc G.