Arquivos com nomes vazios

8

Eu estava escrevendo um widget para exibir arquivos em um determinado diretório e imaginei se precisaria cobrir o caso em que um arquivo tem um nome vazio.

Os testes não mostraram resultados óbvios, por isso fiquei a pensar se alguém tem informações definitivas

$ touch ""
touch: cannot touch '': No such file or directory

$ echo > ""
bash: : No such file or directory
    
por Johannes Schaub - litb 05.03.2013 / 20:53

4 respostas

14

Um nome de arquivo pode não estar vazio. Para citar a Única especificação Unix, §3.170 , um nome de arquivo é:

A name consisting of 1 to {NAME_MAX} bytes used to name a file. The characters composing the name may be selected from the set of all character values excluding the <slash> character and the null byte.

Portanto, ele deve consistir em pelo menos 1 byte, ou seja, não vazio.

Não que, a partir dessa definição, nenhum desses caracteres precise ser visível (ou seja, todos possam ser espaços em branco), nem precisam ser impressos (todos podem ser caracteres de controle). E se você está assumindo que os nomes de arquivos são UTF-8, eles não precisam ser.

    
por 05.03.2013 / 21:12
3

Eu não acho que você possa ter um arquivo sem nome. No entanto, você pode querer manipular o caso (um pouco inventado) de um nome de arquivo que consiste em nada além de espaços, que são possíveis:

$ echo "Hi" > "          "
$ echo "Bye" > "         "
$ cat "         "
Bye
$ cat "          "
Hi
    
por 05.03.2013 / 20:57
1

Interessante. Parece que você pode criar nomes apenas com espaço em branco:

$ touch " "
$ ls -l
total 0
-rw-r--r-- 1 user user 0 Mar  5 22:57
$ file \
 : empty
    
por 05.03.2013 / 20:58
1

EDITAR : ERRADO ERRADO ERRADO.

No meu caso, o nome do arquivo não estava vazio, consistia em caracteres não imprimíveis. Veja: Como você cria um arquivo com um nome vazio?

Resposta antiga

Você deveria. Eu não sei como, mas eu criei um arquivo com um nome de arquivo vazio, duvido que houvesse um espaço em branco:

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 $

Eu perguntei ao #linux como remover o arquivo e uma pessoa sugeriu que eu removesse todos os outros arquivos e usasse a conclusão da tabulação, o que dava 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 pressionasse a tecla tab, mas isso não aconteceu.

    
por 20.07.2013 / 23:43

Tags