Acabei de apagar tudo com find -exec mv?

26

Eu tentei descobrir isso sozinho. Aqui está o comando que usei no terminal:

find . -name "*.jpg" -exec mv {} pictures \;

Eu não criei um diretório chamado imagens primeiro. O que aconteceu foi um arquivo chamado pictures.gif foi criado. Será que os arquivos foram sobrescritos quando foram movidos?

O que é esse arquivo pictures.gif que foi criado como resultado desse comando?

Os arquivos ainda estão possivelmente na unidade em algum lugar?

    
por jtnewhou 09.05.2013 / 23:08

2 respostas

45

Primeiro: pare de usar essa unidade agora . É ok para remontá-lo somente leitura, apenas certifique-se de não escrever mais. Sim, você excluiu as fotos. Eles podem ser recuperáveis, mas quanto mais você continuar usando essa unidade, menor a chance de recuperar algo.

Seu comando executou mv pic1.jpg pictures , mv pic2.jpg pictures , etc. Cada chamada de mv sobrescreveu o arquivo atualmente denominado pictures por outra figura.

Mover um arquivo (dentro do mesmo sistema de arquivos) significa desanexá-lo do diretório que o contém e anexá-lo ao diretório de destino sob o novo nome. Portanto, nenhum dado de arquivo foi modificado ou excluído por esse comando, apenas as entradas de diretório das imagens que desapareceram.

Você pode executar uma ferramenta que vasculha o espaço livre do seu sistema de arquivos e procura coisas que pareçam jpegs. Felizmente, todo arquivo jpeg começa com um cabeçalho reconhecível. As ferramentas que procuram conteúdo excluído são chamadas ferramentas de escultura . Existem alguns no Ubuntu, incluindo recoverjpeg , acima de tudo , testdisk ,… Se as fotos estiverem em uma partição doméstica separada ou em uma unidade externa, instale uma ou mais desses pacotes e aponte-os para a partição com as imagens excluídas.

Se as fotos estiverem no disco do sistema, você precisará parar de usar o sistema imediatamente. Use outro computador para baixar um live CD ou USB e inicialize a partir dele. Qualquer um dos CDs ao vivo que inclua testdisk deve ser adequado, mas alguns são mais fáceis de usar do que outros. O CD de Recuperação do Sistema é um bom CD de recuperação do sistema para fins gerais. O Ubuntu Rescue Remix pode ser mais familiar para um usuário do Ubuntu.

Para referência futura, adquira o hábito de usar mv -i , a menos que você pretenda sobrescrever arquivos. Você pode já ter um alias para mv , mas isso só entra em ação quando você digita mv diretamente na linha de comando, não quando mv é invocado por um script ou pelo comando find .

$ : >pictures
$ mv -i foo.jpg pictures
mv: overwrite 'pictures'?

Além disso, se você colocar um / após um nome que deveria ser o nome de um diretório, você receberá um erro se o diretório não existir, ou se houver um arquivo com esse nome, não é um diretório.

$ : >pictures
$ mv foo.jpg pictures/
mv: cannot move 'foo.jpg' to 'pictures/': Not a directory
$ rm pictures
$ mv foo.jpg pictures/
mv: cannot move 'foo.jpg' to 'pictures/': Not a directory

Para evitar as armadilhas de find , você pode usar o recurso de passagem de diretório recursivo do bash. Você precisa ativá-lo primeiro com o comando shopt -s globstar (você pode adicionar essa linha ao seu ~/.bashrc . Então:

mv **/*.jpg pictures/

(Note que no bash, **/ também percorre links simbólicos para diretórios, e não há como desativá-lo. Se você quiser uma travessia recursiva que não olhe através de links simbólicos para diretórios, use zsh ou find. )

    
por Gilles 09.05.2013 / 23:42
13

Eu tenho medo que você tenha perdido todas as suas fotos nesse único arquivo. É possível recuperar alguns arquivos usando ferramentas forenses como acima de tudo, mas a taxa de sucesso diminui quanto mais tempo você usa a mídia (disco ). (para ser preciso, quanto mais tempo a partição é montada .)

Na próxima vez, quando se referir a um diretório, adicione uma barra a ele e adicione a opção -i para solicitar confirmação, caso já exista um arquivo:

find -name "*.jpg" -exec mv -i {} pictures/ {} \;
    
por Lekensteyn 09.05.2013 / 23:23