Come si crea un file con un nome vuoto?


9

Non so come, ma ho creato un file con un nome file vuoto, dubito che ci fosse uno spazio bianco lì (spiegherò perché alla fine):

chaouche@karabeela /mnt/ubuntu/storage $ ls
total 352K
drwx------  3 chaouche chaouche 4.0K Feb 12 11:00
drwxr-xr-x  4 chaouche chaouche 4.0K Apr 14 23:13 AUDIO
drwxr-xr-x  5 chaouche chaouche 4.0K Jul 20 22:25 BACKUPS
-rw-r--r--  1 chaouche chaouche 310K Jun 15 13:00 cv_yassine_chaouche_2012.pdf
drwxr-xr-x  2 chaouche chaouche 4.0K Jun 10 22:16 Mageia-3-i586-DVD
drwxr-xr-x  5 chaouche     1001 4.0K Oct 12  2012 MUSIQUE
drwxr-xr-x 15 chaouche chaouche 4.0K Oct 27  2012 PARISVIII
drwxr-xr-x  6 chaouche chaouche 4.0K Jun 12 18:33 SABAYON
drwxr-xr-x  5 chaouche chaouche 4.0K Jun 15 13:23 SIFTECH
drwxr-xr-x  5 chaouche chaouche 4.0K Feb  6 15:11 TOILES
drwxr-xr-x  4 chaouche chaouche 4.0K Jul 17 17:21 VIDEOS
chaouche@karabeela /mnt/ubuntu/storage $

Ho chiesto a #linux come rimuovere il file e una persona mi ha suggerito di spostare tutti gli altri file e utilizzare il completamento della scheda, che ha dato un comportamento molto interessante:

# with tab completion
chaouche@karabeela /mnt/ubuntu/storage $ ls /
total 45M
-rwxr-xr-x  1 chaouche chaouche  34M Jan 16  2013 inkscape-0.48.4-1-win32.exe
-rwxr-xr-x  1 chaouche chaouche 8.6M Feb  4 11:42 mypaint-1.0.0-win32-installer.exe
-rwxr-xr-x  1 chaouche chaouche 2.7M Jan 17  2013 pdftkb_setup.exe

# without tab completion, wrote "/" by hand
chaouche@karabeela /mnt/ubuntu/storage $ ls /
total 212K
-rw-r--r--   1 root root    0 Apr 15  2012 1
drwxr-xr-x   2 root root 4.0K Dec  9  2012 bin
drwxr-xr-x   3 root root 4.0K Jun 15 12:10 boot
-rw-------   1 root root  74K Jul  1  2011 dead.letter
drwxr-xr-x  19 root root 4.2K Jul 20 20:14 dev
drwxr-xr-x 117 root root  12K Jul 20 21:30 etc
drwxr-xr-x   4 root root 4.0K Jun 12 18:40 home
drwxr-xr-x   2 root root 4.0K Jun  8  2011 initrd
drwxr-xr-x  20 root root  12K Dec  9  2012 lib
drwx------   2 root root  16K Jun  7  2011 lost+found
drwxr-xr-x   4 root root 4.0K Jul  3 01:56 media
drwxr-xr-x   9 root root 4.0K Apr 15 00:06 mnt
drwxr-xr-x   8 root root 4.0K Jun 30 23:19 opt
dr-xr-xr-x 198 root root    0 Jun 15 13:10 proc
drwxr-x---  28 root root 4.0K Jul 20 21:42 root
drwxr-xr-x   2 root root  12K Dec  9  2012 sbin
drwxr-xr-x   2 root root 4.0K Apr  3  2011 srv
drwxr-xr-x  12 root root    0 Jun 15 13:10 sys
-rw-r--r--   1 root root    0 Jun 12 18:40 thisismageia
drwxrwxrwt  69 root root  36K Jul 20 22:04 tmp
drwxr-xr-x  14 root root 4.0K Nov  6  2011 usr
drwxr-xr-x  18 root root 4.0K Jul  2  2011 var
chaouche@karabeela /mnt/ubuntu/storage $

Se nel nome del file fosse presente uno spazio bianco, sarebbe stato sostituito da \ "" quando ho premuto il tasto Tab, ma non è stato così.


5
Apparentemente è una directory non un file che contiene tre file.
Bananguin,

2
Supponendo che tu abbia ancora mantenuto la directory in cui hai spostato tutto tranne il file vuoto, cosa succede quando lo fai file *?
Joseph R.,

No, sfortunatamente, ho rinominato il file con il comando mv.
ychaouche,


2
Questa domanda non è un duplicato di quella.  Questa domanda riguarda le tecniche pratiche per gestire un file (o una directory) creato accidentalmente il cui nome non contiene caratteri di stampa.  L'altra domanda è una discussione teorica, ipotetica, sconclusionata sui modi in cui potresti creare un tale file se lo volessi, e non dice nulla su come affrontare le conseguenze.
G-Man dice "Ripristina Monica" il

Risposte:


14

Non è possibile avere un file con un nome vuoto. Quello che hai è un file il cui nome è interamente costituito da caratteri vuoti o non stampabili.

Per vedere esattamente qual è il nome del file, esegui LC_CTYPE=C ls -b. Questo sostituisce tutti i caratteri vuoti o non stampabili con fughe ottali. Ad esempio, un file il cui nome è un singolo spazio di larghezza zero verrebbe elencato come \342\200\213.

È possibile isolare questo file con un glob che esclude i file con un bel nome. Ad esempio, potresti provare a elencare i file il cui nome non inizia con una lettera.

chaouche@karabeela /mnt/ubuntu/storage $ ls -d [^A-Za-z]*

Non dimenticare l'opzione -d, in modo che lselenca la directory stessa e non il suo contenuto.

È necessario rinominare il file per avere un nome ragionevole. Puoi fare affidamento sul completamento della shell o utilizzare un glob che corrisponde solo a questo file.

mv [^A-Za-z]* windows-programs

5

Potrebbe essere una directory con solo spazi o caratteri non stampabili nel nome. Inoltre, sembra che abbia solo una voce, diversa da '.' e '..', motivo per cui vedi '3' nella seconda colonna dell'output del tuo primo comando. Si può sempre usare statper stampare il nome della directory, con: stat -f "'%N'" *. Se non è stampabile, potresti doverlo convogliare cat -vo od -cvedere di cosa si tratta.

Per rimuoverlo, probabilmente dovrai eseguire rmdir -- 'dirname'(sostituisci 'dirname' con il nome della directory. Potresti aver bisogno di usare globs se contiene nomi non stampabili), anche se come ho detto prima, sembra avere contenuti così tu dovrò scendere in quella directory con cd -- 'dirname'ed esaminarne il contenuto.

Suggerirei di evitare l'utilizzo rm -rfa tutti i costi, poiché il problema di denominazione delle directory è facile da confondere.

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.