Eu queria criar um arquivo chamado test
. Acidentalmente eu corro em mkdir test
vez de touch test
.
É possível converter o test
diretório em um arquivo chamado test
?
Que tal converter um arquivo nomeado test
em um diretório com o mesmo nome?
Eu queria criar um arquivo chamado test
. Acidentalmente eu corro em mkdir test
vez de touch test
.
É possível converter o test
diretório em um arquivo chamado test
?
Que tal converter um arquivo nomeado test
em um diretório com o mesmo nome?
Respostas:
Isso não é possível para qualquer Unix ou Linux que eu já toquei.
Sob alguns Unixes mais antigos, diretórios são arquivos, especialmente marcados, mas ainda arquivos. Você costumava ler um diretório cat
no SunOS, por exemplo. Muitos sistemas de arquivos modernos podem ter diretórios como árvores B + ou alguma outra estrutura de dados em disco. Portanto, transformar um arquivo em um diretório ou vice-versa sempre exigiria uma exclusão e uma recriação com o mesmo nome.
Não existe tal comando, porque não haveria absolutamente nenhum sentido nele. Sua pergunta é como pedir uma maneira de transformar uma caixa em um retângulo plano. O que você faria com as coisas na caixa (diretório)? Como o retângulo corresponderia à caixa de onde veio?
Arquivos e diretórios servem para funções completamente diferentes. Embora um diretório seja de fato um arquivo nos sistemas * nix, isso se aplica apenas às partes internas do sistema e não ao que você, usuário, vê. Portanto, converter um arquivo em um diretório ou vice-versa sempre envolverá a exclusão do arquivo e a criação do diretório. O melhor que você poderia esperar seria usar o mesmo inode, mas novamente, não há muito sentido nisso.
Crie uma função para fazer o que quiser. ( bash
ou outro Bourne / POSIX como shell assumido)
$ dir2file() { rmdir -- "$1" && touch -- "$1";}
$ mkdir adir
$ dir2file adir
$ ls -l adir
-rw-r--r-- 1 xtian xtian 0 2014-03-04 14:59 adir
$
Eu uso deliberadamente o rmdir
que falhará se adir
não for um diretório ou não estiver vazio (não -f
forçar). touch
será executado apenas se rmdir
for bem-sucedido.
Você pode colocar a definição da função no arquivo de personalização do shell ( .bashrc
para bash
).
--
faz?
--
marcas marcam o final dos sinalizadores rmdir
e, se touch
souberem do passado, é um nome de arquivo, mesmo que comece com -
.
Para aqueles que se perguntam por que você deseja fazer isso, siga este tópico:
Aparentemente, um bug no firmware inverteu o bit na entrada de diretório do arquivo, fazendo o sistema operacional pensar que é uma pasta em vez de um arquivo.
Embora eu não tenha o roteador Linksys em questão, algo mudou todos os meus arquivos .jpg em pastas vazias. Se há alguma maneira de mudar o bit (ou o que seja) que diz que uma entrada de diretório NTFS é uma pasta versus um arquivo, eu gostaria de saber sobre isso.
Uma das soluções nesse segmento de dois anos disse que se o disco rígido que contém as pastas que costumavam ser arquivos está conectado a um Mac executando o OS / X, o Mac os verá como arquivos novamente e eles pode ser copiado para uma pasta no Mac. Eu não tenho um Mac para experimentar isso, então se alguém souber uma maneira de virar a página ...
Em primeiro lugar, ter acesso ao terminal e executar ls -al file
com arquivo sendo o arquivo que você deseja converter de volta para uma pasta real. Se houver arquivos e subdiretórios listados, significa que seu "arquivo" era anteriormente uma pasta com conteúdo real e você pode continuar:
Executar:
sudo chmod 700 /
OU
sudo chmod 700 file
Reinicie o sistema e recupere o acesso ao terminal e execute:
sudo chmod 744 /
OU
sudo chmod 744 file
Lembre-se: "arquivo" deve ser substituído pelo arquivo que você deseja converter novamente em uma pasta REAL.
Essa é apenas uma maneira arbitrária de resolver esse problema, mas cria anomalias de permissão que você pode usar fsck -f
para corrigir (enquanto não está montado, é claro) ou definir manualmente novas permissões, conforme necessário.
Novamente, essa é apenas uma maneira comprovada de evitar a exclusão do arquivo que anteriormente era uma pasta não vazia.
rm -f test && touch test
Exceto isso, eu realmente não sei