Por que não é possível nomear uma pasta "._." No Windows 7?

74

Acabei de notar que não é possível nomear uma pasta ._.- ela é nomeada ._. Às vezes, desaparece logo após o nome, mas reaparece após a atualização da exibição. O Windows parece ter um problema com pontos no final de um nome de arquivo - por que isso?

Preto
fonte
21
É importante notar que você encontrou o "hack" para iniciar um nome de arquivo com um .no Windows.
Jpmc26
8
@ThisNameBetterBeAvailable Não testado, mas cd -- -_-pode funcionar. O --é um marcador comum de "fim de opções".
TripeHound 19/01
13
@ThisNameBetterBeAvailable Não, --por si só significa " este é o fim das opções, trate qualquer coisa que comece com -um valor literal ". Acabei de testar: mkdir -- -_-e cd -- -_-funciona como eu esperava.
TripeHound 19/01
2
Como alternativa, ./-_-deve funcionar também.
glglgl
5
@ Alexander No linux, já que parece ser o local para onde os comentários foram, pois cd "-_-"o shell usa as aspas para agrupar, mas não as trata como parte do argumento; erro cominvalid option
Izkata 19/01

Respostas:

123

O Windows normalmente exige que os arquivos não tenham extensão ou extensão que tenha pelo menos um caractere; não é legal com extensões de comprimento zero, ou seja, nomes de arquivos que terminam com .. As pastas também podem ter extensões; portanto, o Windows não deixa seus nomes terminarem com a .. Fonte, do artigo que DavidPostill vinculou :

Use um ponto para separar o nome do arquivo base da extensão no nome de um diretório ou arquivo .

(Ênfase minha.) Se você tentar finalizar um arquivo ou diretório nomeado com um ponto final, o Windows simplesmente assume que você não queria extensão e a remove, mesmo que você o crie mdem um prompt de comando.

Zona de perigo! Se você desejar diretamente o nome de uma pasta ., precisará usar a seqüência de substituição mágica do nome bruto \\?\. Em um prompt de comando, de md \\?\C:\path\to\container\._.fato criará uma pasta chamada ._., mas muitos programas terão problemas com ela, até o Explorer:

._.  problemas

Esse diretório só pode ser removido com rdseguido por seu \\?\nome ou renomeado com seu nome abreviado (8.3 dir /x).

Ben N
fonte
1
Obrigado pela sua resposta detalhada! :) Eu acho que essa seria uma pasta perfeita para ocultar coisas secretas, como senhas, porque só é possível abrir a pasta se você renomeá-la primeiro, e nem todo mundo sabe como renomeá-la.
preto
19
@ EdwardBlack não impediria ninguém que pudesse ler troca de pilhas (e, portanto, nem sequer forneceria segurança contra o hipotético irmãozinho). O nome dado por dir /xfacilita bastante, e outras vezes esse nome é útil.
Chris H
11
FWIW, as ferramentas de linha de comando da Cygwin também podem criar (e manipular) esses diretórios no Windows 7, sem usar uma sequência mágica.
21716 Steve Steveop
4
@ EdwardBlack Como Chris H mencionou, não é muito secreto, portanto você não deve armazenar nada de particularmente importante nessa pasta. Além disso, o sigilo e a proteção digital são um problema que foi resolvido várias vezes. Você pode usar qualquer número de métodos e programas de criptografia para manter as coisas seguras sem depender de nomes obscuros de pastas.
Kris Harper
3
Nitpick: pelo menos nos 8,3 dias (eu não investiguei o que está gravado no disco no NTFS), o período nunca foi gravado no disco em primeiro lugar. O nome foi dividido em nome e extensão, eles foram armazenados separadamente. Após a leitura, levou o nome e, se houve uma extensão, adicionou o período e a extensão ao nome. Portanto, não havia como expressar ._. na estrutura de diretórios, é claro que você perdeu o ponto final.
Loren Pechtel
22

O Windows parece ter um problema com pontos no final de um nome de arquivo? Por que é isso?

Não termine um nome de arquivo ou diretório com um espaço ou um ponto. Embora o sistema de arquivos subjacente possa suportar esses nomes, o shell do Windows e a interface do usuário não.

O link da fonte abaixo entra em mais detalhes sobre as regras para nomeação.

Arquivos de nome de origem , caminhos e espaços para nome

DavidPostill
fonte
5
Isso ainda soa como um bug para mim.
ralu
@ralu Se for um bug, a Microsoft parece totalmente desinteressante em corrigi-lo. Essas restrições existem desde o Windows XP (se não antes).
DavidPostill
Windows XP? Meu palpite é que essas restrições têm suas raízes na 0.x MS-DOS - vamos perguntar ao Sr. Gates para esclarecer a questão ...
Christian Severin
17

Não é um inseto. É por design para evitar problemas de compatibilidade.
É uma sobra dos velhos tempos do DOS.

Os sistemas de arquivos FAT12 (disquete) e FAT16 (FAT16 anteriores ao suporte a nomes longos de arquivos introduzidos no Windows 95) tinham apenas nomes de arquivos armazenados em 11 bytes:
8 bytes para o nome, 3 para a extensão. O "período" entre o nome e a extensão nem foi armazenado. Foi implícito e adicionado automaticamente para fins de exibição.
Os diretórios não tinham extensões. Em vez disso, os 3 bytes da extensão foram preenchidos com caracteres "$" (que eram ilegais em nomes reais).
Como o Windows ainda é compatível com este Explorer e muitos outros componentes do Windows silenciosamente, o período final desaparece para evitar a criação de problemas de compatibilidade.
Como outros já declararam, você pode realmente lidar com essas pastas usando a semântica RAW (prefixo \\? \ Antes do nome do caminho absoluto).
Nos bastidores, NTFS e sistemas de arquivos de rede não têm problemas com esses arquivos e pastas. É apenas um caso do Explorer tentando impedir o usuário de criar algo que pode causar problemas para outro software.

(De fato, existem outras sobras também:
nomes de arquivos como COM, COM1, COM2, AUX, PRN, LPT, LPT1, LPT2, LPT3, CON podem causar problemas semelhantes, onde o Explorer e muitas outras partes do Windows ficam confusas porque esses nomes são nomes "reservados" que também datam da era do DOS.)

Tonny
fonte
3
Para outros leitores que inicialmente ficaram incrédulos com relação ao ponto que não está sendo armazenado: isso é correto para o CP / M e todas as versões do FAT, incluindo FAT16 e FAT32 .
Ben N
1
Lembro-me de algum programa antigo do DOS (executando no DOS real, provavelmente usando diretamente as funções INT13), me dando um pesar real uma vez, de alguma maneira, conseguindo criar um arquivo chamado a: foo.bar na unidade c: ...
rackandboneman
2
@ BenN: na verdade, no FAT32 é um pouco diferente; ele armazena um nome de arquivo curto (8 + 3 bytes com nomes compatíveis com "ponto implícito"), além de um nome de arquivo longo (geralmente chamado de LFN), composto de até 255 caracteres UCS-2 com ponto explícito e, a menos que você está trabalhando com aplicativos de 16 bits, sempre trabalha com o LFN.
Matteo Italia
1
@MatteoItalia Entendo que os nomes longos dos arquivos são mantidos em entradas de arquivos falsos; As instalações do Windows conhecidas procuram essas entradas e as processam em vez do SFN, se possível. Veja a publicação de Raymond Chen sobre o assunto ou a parte VFAT do formato FAT32 que eu liguei acima.
Ben N
1
-1 você está errado sobre as extensões de diretório; talvez isso fosse verdade para o CP / M (minha memória é ruim por causa desse sistema operacional), mas eu uso o diretório "programm.ing" na minha árvore desde os tempos do DOS e consulte win.tue.nl/~aeb/linux/ fs / fat / fat-1.html - as entradas de diretório são tratadas exatamente como arquivos, elas podem ter o nome 8.3 também. Teste: crie um diretório 8.3 ( mkdir testfile.name) e exiba seu nome do DOS no Windows ( dir /x) - você obterá TESTFI~1.NAMcomo esperado.
precisa saber é o seguinte
3

O problema aqui é que o Windows (DOS) permitiu nomes de arquivos 8.3 em sistemas de arquivos FAT. Significado, 8 caracteres, seguido de a. seguido por três caracteres. Unix e Linux permitem qualquer caractere, exceto / e \ 0. \ 0 é o terminador da cadeia de caracteres C e / é o separador de diretório. Tudo o resto pode ser usado.

O Windows 95 contornou esse problema mantendo um banco de dados de nomes de arquivos curtos (8.3) nos metadados de nomes longos de arquivos (LFN). Se você limpou os arquivos do sistema operacional Windows 95, ficaria com arquivos com nomes estranhos no disco na sua próxima instalação do Windows 95. Por exemplo, "Meus documentos" pode ser nomeado MYDOCU ~ 1 no disco. Obviamente, se você perdeu os metadados, não seria possível convertê-los facilmente.

O shell precisa lidar com muitos incrementos históricos que permanecem desde os dias do MS-DOS.

Espero que isto ajude

Ed Neville
fonte
1
Não havia realmente um banco de dados em si; O Windows encravou as partes do nome do arquivo longo no disco como arquivos falsos. Veja o post de Raymond Chen sobre o assunto .
Ben N