Transforma um diretório em um arquivo ou um arquivo no diretório

13

Eu queria criar um arquivo chamado test . Acidentalmente eu corro mkdir test em vez de touch test .

É possível converter o diretório test em um arquivo chamado test ?

Que tal converter um arquivo chamado test em um diretório com o mesmo nome?

    
por Ionică Bizău 04.03.2014 / 15:21

5 respostas

11

Isso não é possível para nenhum Unix ou Linux que já toquei.

Em alguns Unixes antigos, os diretórios são arquivos, especialmente marcados, mas arquivos estáticos. Você costumava ler um diretório com 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. Então, transformar um arquivo em um diretório ou vice-versa sempre exigiria uma exclusão e uma recriação com o mesmo nome.

    
por 04.03.2014 / 15:44
6

Não, não há tal ordem, porque não haveria absolutamente nenhum ponto nisso. 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 funções completamente diferentes. Embora um diretório seja de fato um arquivo em sistemas * nix, isso se aplica apenas aos componentes internos do sistema e não ao que você , o usuário, veja. 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.

    
por 04.03.2014 / 18:12
2

Crie uma função para fazer o que quiser. ( bash ou outro shell tipo Bourne / POSIX 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 rmdir , que falhará se adir não for um diretório ou não estiver vazio (sem -f forçar). touch será executado somente se rmdir for bem-sucedido.

Você poderia colocar a definição de função no seu arquivo de personalização do shell ( .bashrc para bash ).

    
por 04.03.2014 / 16:00
2

Para aqueles que querem saber por que você gostaria de fazer isso, siga este tópico:

link

Aparentemente, um bug no firmware inverteu o bit na entrada de diretório do arquivo, fazendo com que o SO pensasse que é uma pasta em vez de um arquivo.

Embora eu não tenha o roteador Linksys em questão, alguma coisa mudou todos os meus arquivos .jpg em pastas vazias. Se há alguma maneira de inverter o bit (ou qualquer outra coisa) que diga que uma entrada de diretório NTFS é uma pasta versus um arquivo, eu gostaria de saber sobre isso.

Uma das soluções para esse segmento de dois anos disse que se o disco rígido contendo as pastas-que-se-usaram-arquivos estiver conectado a um Mac com OS / X, o Mac os verá como arquivos novamente , e eles podem ser copiados para uma pasta no Mac. Eu não tenho um Mac para experimentar, então se alguém souber uma maneira de mudar o visual ...

    
por 14.08.2015 / 00:42
1

Primeiro, obtenha acesso ao terminal e execute ls -al file com arquivo sendo o arquivo que você deseja converter de volta em 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 /

OR

sudo chmod 700 file

Reinicie o sistema e recupere o acesso ao terminal e execute:

sudo chmod 744 /

OR

sudo chmod 744 file

LEMBRE-SE: "arquivo" deve ser substituído pelo arquivo que você deseja converter em uma pasta REAL.

Esta é 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 estiver montado, é claro) ou definir manualmente novas permissões conforme necessário.

NOVAMENTE, esta é apenas uma maneira comprovada de evitar a necessidade de excluir o arquivo que anteriormente era uma pasta não vazia.

    
por 20.11.2014 / 22:57