Eu usei o mv ./*/* para achatar um diretório em um sistema de arquivos ntfs, sem adicionar. até o final do comando, agora todos os meus arquivos sumiram
2
Como posso recuperar esses arquivos?
Eu usei: mv ./*/* quando deveria ser mv ./*/* . Agora todos os meus arquivos sumiram.
Primeiro, lembre-se que com Un * x não mv expande os curingas, mas o shell:
Se você digitar mv ./*/* . que é expandido para mv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4 . e mv vai fazer o que quiser, porque o alvo (ou seja, o próprio último argumento) é um diretório. Tudo (ou seja, todos os arquivos / diretórios fornecidos como argumentos exceto o último) é movido para o diretório atual ( . ).
Se você digitar mv ./*/* this_is_a_file que é expandido para mv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4 this_is_a_file e mv recusa o fazer qualquer coisa com mv: target „this_is_a_file“ is not a directory. Nada é sobrescrito ou movido.
Agora, ao seu comando: mv ./*/* é expandido para mv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4. Como você pode ver no meu exemplo, acontece que o último argumento é um diretório, o que é bom para o mv e tudo é movido para ele - e você acaba com essa árvore:
Suponho que você tenha um cenário parecido e é por isso que acredito que seus arquivos não desapareceram, mas mudou-se simplesmente para um nível mais profundo da hierarquia.
Eu acredito que o shell teria expandido ./*/* para uma lista de arquivos e diretórios. E se o último item dessa lista fosse um diretório, mv comando teria usado isso como seu destino.
Se você fez um backup primeiro, restaure a partir do backup. Caso contrário, tente uma ferramenta como NTFS Undelete; você quase certamente não receberá tudo de volta, mas você provavelmente recuperará a maioria das coisas.
Respostas:
Eu não acho que seus arquivos estão perdidos; isso deveria ter acontecido:
Assuma a seguinte estrutura (dirs marcados por
/
)Primeiro, lembre-se que com Un * x não
mv
expande os curingas, mas oshell
:mv ./*/* .
que é expandido paramv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4 .
e mv vai fazer o que quiser, porque o alvo (ou seja, o próprio último argumento) é um diretório. Tudo (ou seja, todos os arquivos / diretórios fornecidos como argumentos exceto o último) é movido para o diretório atual (.
).mv ./*/* this_is_a_file
que é expandido paramv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4 this_is_a_file
e mv recusa o fazer qualquer coisa commv: target „this_is_a_file“ is not a directory
. Nada é sobrescrito ou movido.Agora, ao seu comando:
mv ./*/*
é expandido paramv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4
. Como você pode ver no meu exemplo, acontece que o último argumento é um diretório, o que é bom para o mv e tudo é movido para ele - e você acaba com essa árvore:Suponho que você tenha um cenário parecido e é por isso que acredito que seus arquivos não desapareceram, mas mudou-se simplesmente para um nível mais profundo da hierarquia.
fonte
Tem certeza de que eles se foram?
Eu acredito que o shell teria expandido
./*/*
para uma lista de arquivos e diretórios. E se o último item dessa lista fosse um diretório,mv
comando teria usado isso como seu destino.fonte
Se você fez um backup primeiro, restaure a partir do backup. Caso contrário, tente uma ferramenta como NTFS Undelete; você quase certamente não receberá tudo de volta, mas você provavelmente recuperará a maioria das coisas.
fonte