Rimozione di file con caratteri strani nel nome file in OS X

Dopo un errore di memory nel mio programma, sono bloccato con un file con uno strano nome di file. Sta dimostrando abbastanza resistente a tutti i methods normali per rimuovere file con nomi strani.

Il nome del file è:

% 8BUȅ҉% 95d% F8% FF% FF \ x0f% 8E% 8F% FD% FF% FF% 8B% B5T% F8% FF% FF% 8B% 85 \% F8% FF% FF \ x03% 85x% F8% FF% FF% 8B% 95D% F8% FF% FF% 8B% BD% 9C% F8% FF% FF% 8D \ x04% 86% 8B% B5 @% F8% FF% FF% 89% 85% 90% F8 % FF% FF% 8B% 85X% F8% FF% FF \ x03% 85% 9C% F8% FF% FF% C1% E7 \ x02% 8B% 8DX

Ho provato quanto segue:

  • rm *
      No such file or directory
  • rm -- filename
      No such file or directory
  • rm "filename"
      No such file or directory
  • ls -i per get il numero di inode
      No such file or directory
  • stat filename
      No such file or directory
  • zip la directory in cui si trova il file
      → si error occurred while adding "" to the archive
  • eliminare la directory nel cercatore
      error -43
  • in Python: os.unlink(os.listdir(u'.')[0])
      OSErrorNo such file or directory
  • find . -type f -exec rm {} \;
      No such file or directory
  • controllava blocchi sul file con lsof
      no locks

Tutti questi tentativi provocano un file (lungo nome file qui) non trovato errore, o errore -43. Anche ls -i .

Non ho potuto trovare ulteriori opzioni, quindi prima di riformattare o riparare il mio filesystem ( fsck potrebbe aiutare) ho pensato che forse c'è qualcosa che mi mancava.

Ho scritto questo piccolo programma C per get il numero di inode:

 #include <stdio.h> #include <stddef.h> #include <sys/types.h> int main(void) { DIR *dp; struct dirent *ep; dp = opendir ("./"); if (dp != NULL) { while (ep = readdir (dp)) { printf("d_ino=%ld, ", (unsigned long) ep->d_ino); printf("d_name=%s.\n", ep->d_name); } (void) closedir (dp); } else perror ("Couldn't open the directory"); return 0; } 

Che funzioni. Ora ho il numero di inode, ma il normale find -inum inode_num -exec rm '{}' \; non funziona. Penso che devo usare il clri adesso.

Provare

 find . -type f -exec rm {} \; 

Hai provato a cancellare la directory padre?

Supponendo che il file system sia diverso da JHFS +

I sintomi possono essere indicativi di un problema di normalizzazione.

Nel forum di supporto ZEVO, il NFD: normalization = formD (module di normalizzazione D) include una trascrizione parziale da una discussione a pannello al giorno Illumos ZFS 2012:

… bugiardi sottili che, mi sembra che nessun altro possa apprezzare il mio dolore. Come nello spazio Unicode ci sono in realtà due modi diversi da memorizzare, diversi caratteri – come un é su Mac tradizionalmente sono memorizzati come e e un ' carattere. Quando viene reso li compongono.

Su qualsiasi altra piattaforma … memorizzare i caratteri compositi … un solo clic, un carattere.

Quindi sul Mac, senza intervento, è ansible entrare in alcuni problemi pericolosi perché il Finder lo memorizza in un modo, Terminal ha scelto un modo diverso. Così potete effettivamente andare nel Finder e creare una directory – caffetteria – quindi entrare nel Terminal e

 touch café 

allora hai due oggetti: hai una directory e un file con lo stesso nome, cioè port a tutti i tipi … (!) … sembra uguale, ma diverso … where hai differenziatore, non c'è niente , è come , e nel Finder, a seconda della visualizzazione Finder si ottengono esperienze diverse. A volte si vedono due cartelle, a volte si visualizza una cartella e un file, a volte si visualizza una cartella. È come se fosse bizzarro. Purtroppo …

… esiste un'impostazione esplicita di formD, quindi sul Mac che consistiamo e in effetti è il valore predefinito, dovresti usare formD quindi allora quel problema, non puoi farlo – quando fai il touch in realtà la riprenderà indietro al modo corretto.

Paghi un po 'di un sovraccarico, ma puoi mantenere la tua sanità. È pazzesco avere pile diverse utilizzando varie varianti della codifica.

http://www.ustream.tv/recorded/25862520 intorno alle 00:10:33 sulla timeline.

Per me

 find parent-folder -delete 

problema risolto. Attenzione: questo eliminerà tutta la cartella padre, naturalmente!

Non ho potuto trovare più opzioni, quindi prima di riformattare o riparare il mio filesystem (fsck potrebbe aiutare) ho pensato forse c'è qualcosa che mi mancava.

No, sei stata accurata. Sembra che ci sia un problema con una parte del filesystem. Potresti ripararlo. Oppure potresti pensare a quale altro divertimento vorresti fare. Tuttavia, la cosa semplice è ripararla.

Puoi essere giustamente riluttante a riparare il filesystem: c'è una possibilità molto piccola, ma esistente, che la riparazione potrebbe succedere catastroficamente. Il modo migliore per proteggerti da questo è quello di avere tutti i dati importnti salvati. Assicurarsi che i backup siano in buone condizioni prima di riparare il filesystem.

Quindi, avviare la riparazione. Quando sai cosa fare, a volte ti serve solo il coraggio di procedere. Potresti scoprire che questo è interamente risolto in less di mezzo secondo. (O forse un po 'più a lungo se c'è qualche sovraccarico … 3 secondi.)

Si noti che la riproduzione con dati danneggiati presenta anche il rischio di causare ulteriori problemi di file system, quindi se si sta cercando di essere sicuri, allora la cosa sicura è quella di eseguire il controllo preliminare (che già hai fatto) e quindi prendersi cura del problema (dopo aver verificato i backup).

Di solito apro la cartella allegata in modalità emacs dired, quindi contrassegnare e cancellare.