Como você cria um arquivo com um nome vazio?

9

Não sei como, mas criei um arquivo com um nome de arquivo vazio, duvido que houvesse um espaço em branco (explicarei o porquê no final):

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 $

Perguntei no #linux como remover o arquivo e uma pessoa sugeriu que eu afastei todos os outros arquivos e use a conclusão da guia, o que deu um comportamento muito 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 houvesse um espaço em branco no nome do arquivo, ele teria sido substituído por \ "" quando eu apertei a tecla tab, mas não.

ychaouche
fonte
5
É um diretório, não um arquivo, aparentemente contém três arquivos.
Bananguin
2
Supondo que você ainda tenha mantido o diretório em que você moveu tudo, exceto o arquivo vazio, o que acontece quando o faz file *?
Joseph R.
Não, infelizmente, renomeei o arquivo com o comando mv.
21813 ychaouche
4
Possível duplicação de arquivos com nomes vazios
Ciro Santilli
2
Esta questão não é uma duplicata dessa.  Esta pergunta é sobre técnicas práticas para lidar com um arquivo (ou diretório) criado acidentalmente cujo nome não contém caracteres de impressão.  Essa outra pergunta é uma discussão teórica, hipotética e desmedida sobre maneiras de criar esse arquivo, se você quiser, e não diz nada sobre como lidar com as consequências.
G-Man diz 'Reinstate Monica'

Respostas:

14

Não é possível ter um arquivo com um nome vazio. O que você tem é um arquivo cujo nome consiste inteiramente em caracteres em branco ou não imprimíveis.

Para ver exatamente qual é o nome do arquivo, execute LC_CTYPE=C ls -b. Isso substitui todos os caracteres em branco ou não imprimíveis por escapes octais. Por exemplo, um arquivo cujo nome é um único espaço de largura zero seria listado como \342\200\213.

Você pode isolar esse arquivo com um globo que exclua arquivos com um bom nome. Por exemplo, você pode tentar listar os arquivos cujo nome não começa com uma letra.

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

Não esqueça a opção -d, para que lslista o diretório em si e não seu conteúdo.

Você deve renomear o arquivo para ter um nome razoável. Você pode confiar na conclusão do seu shell ou usar um globo que corresponda apenas a esse arquivo.

mv [^A-Za-z]* windows-programs
Gilles 'SO- parar de ser mau'
fonte
5

Pode ser um diretório com apenas espaços ou caracteres não imprimíveis no nome. Além disso, parece que ele possui apenas uma entrada, além de '.' e '..', e é por isso que você vê o '3' na segunda coluna da saída do seu primeiro comando. Você sempre pode usar statpara imprimir o nome do diretório, com: stat -f "'%N'" *. Se não for imprimível, você pode precisar inseri-lo cat -vou od -cver o que realmente é.

Para removê-lo, você provavelmente terá que executar rmdir -- 'dirname'(substitua 'dirname' pelo nome do diretório. Talvez seja necessário usar globs se houver nomes imprimíveis), embora, como eu disse antes, pareça ter conteúdo para você terá que descer para esse diretório cd -- 'dirname'e examinar seu conteúdo.

Eu sugiro que você evite usá-lo rm -rfa todo custo, pois o problema de nomeação de diretório é fácil de bagunçar.

jsbillings
fonte