Aparentemente, você pode renomear o arquivo para...
.
Se eu fosse louco, como renomearia arquivo para ..
ou .
? Esse nome de arquivo é permitido?
A barra invertida não parece desativar o significado especial do ponto:
$ mv test \.
mv: `test' and `./test' are the same file
.
e..
já existe. E ponto não tem um significado especial..
ou..
do Windows para mídia externaFAT
ouNTFS
, em seguida, tente montar isso em um sistema baseado em Unix. Hm ....
e..
realmente existem em NTFS ea API NT ou se eles são adicionados apenas pela API Win32. Eu sei que existem várias discrepâncias entre o nível mais baixo da API do NT e o Win32, por exemplo, o Win32 oculta vários arquivos da raiz da unidade.Respostas:
..
não é especial, é só que ele já existe.No Unix, Dos e MS-Windows, todos os diretórios possuem um diretório
.
vinculado a si próprio e um diretório..
vinculado ao diretório pai (ou próprio, se o diretório raiz).Se
..
e.
for especial, é apenas porque você não pode removê-los (na verdade você pode, basta remover o diretório que os contém).Portanto, você não pode nomear nenhum arquivo (outro)
.
ou..
.No entanto, você pode criar arquivos
...
,\
,…
,..
(note que existe um espaço após o..
, mas você dificilmente pode vê-lo aqui, ou facilmente em você diretório lista) ou qualquer outro que você, como nome; O único caractere reservado é/
(Aviso - detalhes avançados: e null, null é um caractere especial, não usado para nada, exceto para marcar o fim das coisas e, às vezes, como um separador)..
não tem significado especial: não para nomes de arquivos, kernel ou shell, ele não precisa ser escapado. Na verdade, se um nome de arquivo começa com a,.
então é especial, o arquivo normalmente está oculto, mas ainda não precisa ser escapado.a parte, de lado
Esse comportamento de arquivo oculto surgiu em uma implementação inicial de
ls
onde o autor queria ocultar.
e..
, portanto, eles escreveram código para ocultar todos os arquivos começando com a.
. Outros usuários perceberam esse bug / recurso e começaram a criar arquivos começando com a.
quando eles queriam que o arquivo fosse oculto.Explicação da pergunta vinculada
Na pergunta que você vincula ao questionador, está tentando mover o arquivo para o diretório pai,
..
mas acaba renomeando para...
, os arquivos que começam com um ponto ficam ocultos por padrão, por isso não conseguem encontrá-lo.Ao usar mv no formulário
mv a b
.
ele, efetivamente, é uma operação sem, masmv
trata-o como um erro...
ele, o arquivo será movido para o diretório pai.fonte
If you move to . it is effectively a no operation
? Não é um "não operacional", é um erro se você tentar mover um arquivo de A para B quando A e B são a mesma coisa. Uma demonstração mais prática desse erro émv foo ../some_dir/foo
oumv foo some_subdir/../foo
./
e NUL) e nome reservado (ie.
e..
) poderia ser mais clara. Também vale ressaltar que,.
no início do nome, tem um significado especial apenas na camada de aplicação e não na API de chamada do kernel ou do sistema...
e.
são especiais: você não pode movê-los ou removê-los. Mas eles não são especiais ao mover arquivos para eles.Você não pode renomear um arquivo para
.
ou..
porque todos os diretórios já contêm entradas para esses dois nomes. (Essas entradas apontam para diretórios e você não pode renomear um arquivo para um diretório.)mv
detecta o caso em que o destino é um diretório existente e o interpreta como uma solicitação para mover o arquivo para esse diretório (usando seu nome atual).As barras invertidas não têm nada a ver com isso, porque
.
não é um metacaractere do shell.\.
e.
são os mesmos parabash
.fonte
O problema é que você está movendo um arquivo para um diretório. Isso pode falhar.
Vou lhe contar como era antes.
O mkdir costumava ler isso (enquanto escrevo em sh, foi realmente escrito em C e setuid-root).
Então, como você pode ver, não há muito especial. e .. exceto pelo fato de que eles foram criados para você pelo mkdir e já existem. Agora existe um código que diz que você não pode removê-lo, mas nem sempre foi o caso.
rmdir costumava ficar assim:
fonte