Comment créez-vous un fichier avec un nom vide?

9

Je ne sais pas comment, mais j'ai créé un fichier avec un nom de fichier vide, je doute qu'il y ait un espace (je vais expliquer pourquoi à la fin):

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 $

J'ai demandé sur #linux comment supprimer le fichier et une personne m'a suggéré de déplacer tous les autres fichiers, puis d'utiliser la complétion de l'onglet, ce qui a donné un comportement très intéressant:

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

S'il y avait un espace dans le nom de fichier, il aurait été remplacé par \ "" lorsque j'ai appuyé sur la touche de tabulation, mais ce n'est pas le cas.

ychaouche
la source
5
C'est un répertoire et non un fichier, il contient apparemment trois fichiers.
Bananguin
2
En supposant que vous ayez toujours conservé le répertoire où vous avez tout déplacé sauf le fichier vide, que se passe-t-il quand le faire file *?
Joseph R.
Non, malheureusement, j'ai renommé le fichier avec la commande mv.
ychaouche
4
Copie
2
Cette question n'est pas un double de celle-là.  Cette question concerne les techniques pratiques pour gérer un fichier (ou répertoire) créé accidentellement dont le nom ne contient aucun caractère d’impression.  Cette autre question est une discussion théorique, hypothétique et décousue sur les façons dont vous pourriez créer un tel fichier si vous le vouliez, et ne dit rien du traitement des conséquences.
G-Man dit `` Réintègre Monica '' le

Réponses:

14

Il n'est pas possible d'avoir un fichier avec un nom vide. Vous disposez d'un fichier dont le nom est entièrement composé de caractères vierges ou non imprimables.

Pour voir exactement quel est le nom du fichier, exécutez LC_CTYPE=C ls -b. Cela remplace tous les caractères vierges ou non imprimables par des échappements octaux. Par exemple, un fichier dont le nom est un seul espace de largeur nulle serait répertorié comme \342\200\213.

Vous pouvez isoler ce fichier avec un glob qui exclut les fichiers avec un joli nom. Par exemple, vous pouvez essayer de répertorier les fichiers dont le nom ne commence pas par une lettre.

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

N'oubliez pas l'option -d, qui lsrépertorie le répertoire lui-même et non son contenu.

Vous devez renommer le fichier pour avoir un nom raisonnable. Vous pouvez vous fier à l'achèvement de votre shell ou utiliser un glob qui ne correspond qu'à ce fichier.

mv [^A-Za-z]* windows-programs
Gilles 'SO- arrête d'être méchant'
la source
5

Il peut s'agir d'un répertoire contenant uniquement des espaces ou des caractères non imprimables dans le nom. En outre, il semble qu'il ne comporte qu'une seule entrée, autre que «.» et '..', c'est pourquoi vous voyez le '3' dans la deuxième colonne de la sortie de votre première commande. Vous pouvez toujours utiliser statpour imprimer le nom du répertoire, avec: stat -f "'%N'" *. S'il n'est pas imprimable, vous devrez peut-être le canaliser cat -vou od -cvoir ce qu'il est réellement.

Pour le supprimer, vous devrez probablement exécuter rmdir -- 'dirname'(remplacez 'dirname' par le nom du répertoire. Vous devrez peut-être utiliser des globes s'il contient des noms non imprimables), bien que, comme je l'ai déjà dit, il semble avoir du contenu afin que vous 'devra descendre dans ce répertoire avec cd -- 'dirname'et examiner son contenu.

Je vous suggère d'éviter rm -rfà tout prix d' utiliser , car le problème de nommage des répertoires est facile à gâcher.

jsbillings
la source