Jak utworzyć plik o pustej nazwie?

9

Nie wiem jak, ale utworzyłem plik z pustą nazwą pliku, wątpię, by była tam biała spacja (wyjaśnię dlaczego na końcu):

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 $

Zapytałem na #linux, jak usunąć plik, a osoba zasugerowała, że ​​usunąłem wszystkie inne pliki, a następnie użyj uzupełnienia tabulacji, co dało bardzo interesujące zachowanie:

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

Gdyby w nazwie pliku był biały znak, zostałbym zastąpiony przez \ "" po naciśnięciu klawisza Tab, ale tak nie było.

ychaouche
źródło
5
To katalog, a nie plik, najwyraźniej zawiera trzy pliki.
Bananguin,
2
Zakładając, że nadal masz katalog, w którym wszystko zostało przeniesione oprócz pustego pliku, co się stanie, kiedy to zrobisz file *?
Joseph R.
Nie, niestety zmieniłem nazwę pliku za pomocą polecenia mv.
ychaouche
4
Możliwy duplikat plików z pustymi nazwami
Ciro Santilli 法轮功 病毒 审查 六四 事件 法轮功
2
To pytanie nie jest duplikatem tego pytania.  To pytanie dotyczy praktycznych technik postępowania z przypadkowo utworzonym plikiem (lub katalogiem), którego nazwa nie zawiera znaków drukujących.  To drugie pytanie to teoretyczna, hipotetyczna, chaotyczna dyskusja na temat sposobów utworzenia takiego pliku, jeśli chcesz, i nie mówi nic o radzeniu sobie z następstwami.
G-Man mówi „Przywróć Monikę”

Odpowiedzi:

14

Nie można mieć pliku o pustej nazwie. To, co masz, to plik, którego nazwa w całości składa się z pustych lub niedrukowalnych znaków.

Aby zobaczyć dokładnie, jaka jest nazwa pliku, uruchom LC_CTYPE=C ls -b. Zastępuje wszystkie puste lub niedrukowalne znaki znakami ósemkowymi. Na przykład plik o nazwie pojedynczej przestrzeni o zerowej szerokości zostałby wymieniony jako \342\200\213.

Możesz wyizolować ten plik za pomocą globu, który wyklucza pliki o ładnej nazwie. Na przykład możesz spróbować wyświetlić listę plików, których nazwa nie zaczyna się na literę.

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

Nie zapomnij o tej opcji -d, aby lswyświetlić sam katalog, a nie jego zawartość.

Powinieneś zmienić nazwę pliku, aby mieć rozsądną nazwę. Możesz polegać na ukończeniu powłoki lub użyć globu, który pasuje tylko do tego pliku.

mv [^A-Za-z]* windows-programs
Gilles „SO- przestań być zły”
źródło
5

Może to być katalog zawierający tylko spacje lub znaki niedrukowalne w nazwie. Wygląda na to, że zawiera tylko jeden wpis, inny niż „.” i „..”, dlatego widzisz „3” w drugiej kolumnie wyniku pierwszego polecenia. Zawsze można użyć stat, aby wydrukować nazwę katalogu, w: stat -f "'%N'" *. Jeśli nie da się go wydrukować, być może będziesz musiał go wpiąć cat -vlub od -czobaczyć, co to właściwie jest.

Aby go usunąć, prawdopodobnie będziesz musiał uruchomić rmdir -- 'dirname'(zamień „dirname” na nazwę katalogu. Być może będziesz musiał użyć globs, jeśli zawiera w sobie nazwy niedrukowalne), chociaż jak powiedziałem wcześniej, wydaje się, że ma zawartość, więc Będę musiał zejść do tego katalogu cd -- 'dirname'i sprawdzić jego zawartość.

Sugeruję unikanie korzystania rm -rfza wszelką cenę, ponieważ problem z nazwami katalogów jest łatwy do zepsucia.

jsbillings
źródło