Unità esterna, impossibile svuotare il cestino, rm vede un file, ma ls -la no


9

Stavo cancellando una cartella musicale nel mio disco esterno e ho trovato una directory che non posso cancellare, qualunque cosa provi.

Se lo metto nel cestino tramite la GUI

L'operazione non può essere completata perché la voce "cartella" è in uso.

Se lo uso rm -rfper rimuoverlo tramite terminale

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

Se lo utilizzo ls -laper verificarne il contenuto

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

Se uso rm -i *all'interno della cartella

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

Se uso sudo lsof +D folder/per verificare se sono stati aperti file

Nulla ritorna all'uscita dal programma.

Se uso Utility Disco per riparare (primo soccorso) il disco e il volume

Il controllo dello stato è stato superato, quindi non è stata avviata alcuna riparazione.

Se riavvio macOS

Il problema persiste.

Informazioni addizionali:

  • Posso spostare la cartella all'interno dell'unità, ma non su un'altra unità.

  • Posso rinominare la cartella.

  • ls -i *.mp3ritorna ls: 03 - Ēlusion.mp3: No such file or directory, lo stesso di rm -i *.mp3.

  • Il file non viene visualizzato in Finder, è una parte confusa, qualunque sia il problema di visualizzazione del nome file che Terminal potrebbe avere (l'ho sempre impostato per l'uso Unicode - UTF-8), penso che ci sia più forza in gioco.

In risposta alle domande, ls -ibno , non restituisce nulla.

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

Quindi, a quanto pare, c'è qualcosa in esso, ma ls -lanon riesco a vederlo, mentre rm -iè strano con il nome del file?

get info tramite il menu contestuale della GUI ha confermato che c'è 1 elemento nella cartella, ma con zero byte, e certamente non compare nel finder.

Non sono sicuro di cosa fare a questo punto. Aiuto molto apprezzato!

(Usando 10.13.4 + ExFAT su disco esterno)


1
Hai preso in considerazione il backup di tutte le cose che vuoi - probabilmente già il backup comunque ... quindi riformattare completamente quell'unità per ricominciare?
Solar Mike,

Non ls -bmostrare il file? In tal caso, è possibile ls -biottenere l'inode e seguire la risposta di seguito, oppure in alternativa semplicemente copiare il nome file -bnell'output.
Reid,

Credo che il problema principale non sia con il nome file, ls -bi *.mp3mostra lo stesso risultato mostrato in OP.
Bitinn,

Risposte:


10

Il problema sembra essere causato da un file denominato 03 - Ēlusion.mp3 situato nella directory denominata cartella .

Poiché Terminal.app non è in grado di eseguire il rendering dei segni diacritici nei nomi dei file - beh, lo è, ma questo va oltre lo scopo di fornire la soluzione più semplice per te - nasconde il suo fallimento nascondendo il nome del file (qualcosa di inaudito da me prima d'ora ; forse la sua High Sierra cambia in /.file, /.volfs e inode a 64 bit? Aspetta-- non importa; la tua modifica alla tua domanda mi dice che ti ho frainteso.) Comunque, l'esistenza del file è nota, insieme all'ironico contesa del Finder che non esiste. Ovviamente, lo fa. Ecco come cambiarlo:

Innanzitutto, determinare il numero di inode del file. In Terminal.app, cdnella directory "cartella" ed emettere questo comando:ls -i *.mp3

Copia la stringa numerica dell'inode fornita nella colonna di sinistra della risposta, che sarà simile

12345678 03 - E ̄lusion.mp3

--e lo inserisce in questo comando, che lo rinomina in qualcosa che il terminale può visualizzare correttamente:

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

- dandoti il ​​file "cancella" nella cartella "cartella", entrambi i quali potresti disporre nel modo che preferisci.


Wow, questo è un bug incredibilmente terribile.
Chrylis

2
Non penso sia accurato. Il terminale può nascondere singoli caratteri che non può essere visualizzato, ma non rimuoverà l'intera riga di testo.
duskwuff -inattivo-

1
@duskwuff In entrambi i casi sembra che il nome del file stia causando problemi, quindi questa è una potenziale soluzione a prescindere.
JAB

Scusate ma il problema sembra più complesso di così: ho provato $ ls -i *.mp3, ritorna ls: 03 - Ēlusion.mp3: No such file or directory.
Bitinn,

1
Puoi semplicemente eseguire ls -inella directory per impedire che l'espansione dei caratteri jolly della shell interferisca?
Nohillside

9

Mi ci è voluto molto tempo per arrivare a questo riassunto, ma penso che sia la risposta definitiva.

La causa del mio problema è ben nota :

OS X è quello strano, sia per il fatto che normalizza i nomi dei file sia per il fatto che utilizza NFD invece del più comune NFC .

Storicamente (non così vecchio, prima dell'era 10.11), OS X + HFS + impone il modulo NFD su tutti i nomi di file e otterrai solo risultati NFD da comandi e chiamate di sistema.

Quindi le cose iniziano a cambiare, in 10.11, alcuni risultati delle chiamate di sistema sono normalizzati in NFC , il che lo mette in linea con Windows e Linux, ma a spese di interrompere alcuni programmi che prevedono NFD su OS X.

Ma dall'introduzione di macOS 10.13 + AFPS, il comportamento cambia di nuovo: Apple decide di voler normalizzare NFD su display e chiamate di sistema , ma lascia i nomi dei file originali così come sono (quindi sono supportati sia NFC che NFD, ma se selezioni il nome del file nel Finder o copia il lsrisultato nel Terminale, ottieni il modulo NFD).

Tutto questo è fantastico, fino a quando non inserisci un file con nome file NFD in un'unità esterna usando exFAT (poiché è l'unico formato cross-macOS / Windows con supporto dimensioni file 4 GB +): macOS 10.13 in qualche modo crede che il tuo file debba essere in formato NFC, quindi è scoppiato.

In effetti, ecco un breve test, ho una cartella in Windows sul mio disco exFAT con 3 file:

inserisci qui la descrizione dell'immagine

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

(Puoi copiare l'esatto Unicode qui )

Quando li monto sul mio macOS, questo è quello che vedo:

inserisci qui la descrizione dell'immagine

e ls -laibrisultato:

$ 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

Come puoi vedere, il file NFC è presente ma manca il file NFD.

Anche se sei a conoscenza del problema NFC / NFD su OS X , potresti non aspettarti che l'unità esterna exFAT affronti questo problema in modo opposto (NFC va bene, ma NFD è pant-on-fire).

Ma cosa potrebbe aver fatto sì che il mio file musicale usasse il nome file NFD in primo luogo:

  • Originariamente ho scaricato questo file musicale il 10.9 / 10.10 con un Mac più vecchio, che applica il nome file NFD.
  • Ad un certo punto li sposto su un'unità Windows + NTFS, che non impone NFC / NFD, quindi il nome file NFD originale viene conservato.
  • Ora voglio spostare nuovamente questo file su macOS 10.13 + APFS usando un'unità exFAT (exFAT supporta la stessa convenzione UTF-16 di NTFS).
  • L'inferno si scatena.

Avrei potuto copiare il file tramite unità di rete o TeamViewer, e andrebbe bene, ma exFAT sta attivando questo bug su macOS.

Lezioni:

  • Il nome file Unicode è ancora una minaccia.
  • In realtà hai bisogno di un Windows / Linux per risolvere questo problema (se la situazione è che il tuo file si trova su un'unità esterna exFAT).

@bitlinn: fai clic sul secondo link nel mio commento indirizzato a duskwulff e prova lo strumento di normalizzazione unicode di Apfelstrudel che troverai lì. Molto utile per APFS, inutile con exFAT. O è...?
Doc G.

1
@DocG. questo problema è un po 'più complesso di quanto pensassi inizialmente, ma ho aggiornato di nuovo la mia risposta!
Bitinn,

Sì, ho pensato che potresti finire per farlo. Guarda il mio commento precedente su Error 36e fai una ricerca sul web per qualcosa come "sposta i file avanti e indietro di Windows mac errore 36" per ulteriori informazioni sulla separazione delle attribuzioni dei file su sistemi non HFS. Questo è stato (un altro) noto problema di denominazione dei file MacOS / OS X dall'arrivo di System 10.6. Tra la normalizzazione Unicode e la separazione dell'attributo dot_underscore, hai riscontrato un doppio errore. Dubito che il comando dot_clean avesse una possibilità.
Doc G.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.