Então, sim, como é dito muitas vezes em outro lugar, um nome de arquivo pode conter praticamente qualquer caractere. Mas precisa ser dito que um nome do arquivo é não um arquivo. Ele carrega algum peso como um arquivo atributo em que você normalmente precisa de um nome de arquivo para abrir um arquivo, mas o nome do arquivo somente aponta para o arquivo real. É um link, armazenado no diretório que o registrou, ao lado do inode number - que é uma aproximação muito mais próxima de um arquivo real .
Então, você sabe, chame como quiser. O kernel não se importa - todas as referências de arquivo que ele irá tratar irão lidar com números reais de inode de qualquer maneira. O nome do arquivo é uma coisa para o consumo humano - se você quer fazer uma coisa louca, bem, é o seu sistema de arquivos. Aqui, eu vou fazer algumas coisas malucas:
Primeiro, vou criar 20 arquivos e nomeá-los apenas com espaços, cada nome contendo mais um espaço que o anterior:
until [ $((i=$i+1)) -gt 20 ]
do v=$v' ' && touch ./"$v"
done
Isso é meio engraçado. Veja meu ls
:
ls -d ./*
./ ./ ./ ./ ./
./ ./ ./ ./ ./
./ ./ ./ ./ ./
./ ./ ./ ./ ./
Agora vou espelhar este diretório:
set -- * ; mkdir ../mirror
ls -i1qdU -- "$@" |
sh -c 'while read inum na
do ln -T "$1" ../mirror/$inum
shift ; done' -- "$@"
ls -d ../mirror/*
Aqui estão os conteúdos de ../mirror/
:
../mirror/423759 ../mirror/423764 ../mirror/423769 ../mirror/423774
../mirror/423760 ../mirror/423765 ../mirror/423770 ../mirror/423775
../mirror/423761 ../mirror/423766 ../mirror/423771 ../mirror/423776
../mirror/423762 ../mirror/423767 ../mirror/423772 ../mirror/423777
../mirror/423763 ../mirror/423768 ../mirror/423773 ../mirror/423778
Ok, mas talvez você esteja perguntando - mas que bom é isso? Como você pode dizer qual é qual? Como você pode ter certeza de que vinculou o número de inode correto ao nome de arquivo correto?
Bem ...
echo "heyhey" >>./' '
tgt=$(ls -id ./' ')
cat ../mirror/${tgt%% .*} \
$(ls -1td ../mirror/* | head -n1)
OUTPUT
heyhey
heyhey
Veja, o número do inode contido em ../mirror/"${tgt%% .*}"
e o referenciado por ./' '
referem-se ao mesmo arquivo. Eles descrevem o mesmo arquivo. Eles o nomeiam, mas nada mais. Não há mistério, na verdade, apenas algum inconveniente que você possa causar, mas que acabará tendo pouco ou nenhum efeito na operação do seu sistema de arquivos unix no final.