Wie erstellt man eine Datei mit einem leeren Namen?

9

Ich weiß nicht wie, aber ich habe eine Datei mit einem leeren Dateinamen erstellt. Ich bezweifle, dass dort ein Leerzeichen vorhanden war (ich werde am Ende erklären, warum):

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 $

Ich habe unter #linux gefragt, wie die Datei entfernt werden soll, und eine Person hat vorgeschlagen, alle anderen Dateien zu verschieben und dann die Tab-Vervollständigung zu verwenden, was ein sehr interessantes Verhalten ergab:

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

Wenn der Dateiname ein Leerzeichen enthält, wird es durch "" ersetzt, wenn ich die Tabulatortaste drücke, aber dies ist nicht der Fall.

ychaouche
quelle
5
Es ist ein Verzeichnis, keine Datei, anscheinend enthält es drei Dateien.
Bananguin
2
Angenommen, Sie haben das Verzeichnis beibehalten, in das Sie alles außer der leeren Datei verschoben haben. Was passiert dann file *?
Joseph R.
Nein, leider habe ich die Datei mit dem Befehl mv umbenannt.
Ychaouche
4
Mögliches Duplikat von Dateien mit leeren Namen
Ciro Santilli 法轮功 病毒 审查. 六四
2
Diese Frage ist kein Duplikat dieser Frage.  In dieser Frage geht es um praktische Techniken für den Umgang mit einer versehentlich erstellten Datei (oder einem Verzeichnis), deren Name keine Druckzeichen enthält.  Diese andere Frage ist eine theoretische, hypothetische, weitläufige Diskussion darüber, wie Sie eine solche Datei erstellen könnten, wenn Sie möchten, und sagt nichts über den Umgang mit den Folgen aus.
G-Man sagt 'Reinstate Monica'

Antworten:

14

Es ist nicht möglich, eine Datei mit einem leeren Namen zu haben. Was Sie haben, ist eine Datei, deren Name vollständig aus leeren oder nicht druckbaren Zeichen besteht.

Um genau zu sehen, wie der Dateiname lautet, führen Sie ihn aus LC_CTYPE=C ls -b. Dies ersetzt alle leeren oder nicht druckbaren Zeichen durch oktale Escapezeichen. Beispielsweise würde eine Datei, deren Name ein einzelnes Leerzeichen mit der Breite Null ist, als aufgeführt \342\200\213.

Sie können diese Datei mit einem Glob isolieren, der Dateien mit einem schönen Namen ausschließt. Sie können beispielsweise versuchen, die Dateien aufzulisten, deren Name nicht mit einem Buchstaben beginnt.

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

Vergessen Sie die Option nicht -d, damit lsdas Verzeichnis selbst und nicht dessen Inhalt aufgelistet wird.

Sie sollten die Datei umbenennen, um einen angemessenen Namen zu erhalten. Sie können sich auf die Fertigstellung Ihrer Shell verlassen oder einen Glob verwenden, der nur dieser Datei entspricht.

mv [^A-Za-z]* windows-programs
Gilles 'SO - hör auf böse zu sein'
quelle
5

Es kann sich um ein Verzeichnis handeln, das nur Leerzeichen oder nicht druckbare Zeichen enthält. Außerdem scheint es nur einen Eintrag zu geben, außer '.' und '..', weshalb Sie die '3' in der zweiten Spalte der Ausgabe Ihres ersten Befehls sehen. Sie können jederzeit statden Namen des Verzeichnisses ausdrucken, mit : stat -f "'%N'" *. Wenn es nicht druckbar ist, müssen Sie es möglicherweise weiterleiten cat -voder od -csehen, was es tatsächlich ist.

Um es zu entfernen, müssen Sie wahrscheinlich ausführen rmdir -- 'dirname'(ersetzen Sie 'dirname' durch den Namen des Verzeichnisses. Möglicherweise müssen Sie Globs verwenden, wenn es nicht druckbare Namen enthält), obwohl es, wie ich bereits sagte, Inhalt zu haben scheint Ich muss mit in dieses Verzeichnis absteigen cd -- 'dirname'und dessen Inhalt untersuchen.

Ich würde vorschlagen, dass Sie die Verwendung rm -rfum jeden Preis vermeiden , da das Problem der Verzeichnisbenennung leicht durcheinander zu bringen ist.

jsbillings
quelle