Acabei de excluir 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 pictures primeiro. O que aconteceu foi um arquivo chamado pictures.gif foi criado. Ele encontrou os arquivos e os substituiu à medida que os movia?

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

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

jtnewhou
fonte
Desculpe o que aconteceu com você e espero que você possa recuperar as coisas. Intrigado com o .gif - seria interessante saber o que aconteceu lá.
SEngstrom
7
Se você estiver escrevendo o nome de um diretório, anexe /-o! Sempre! Então só pode ser um diretório.
Lightness Races com Monica
2
Como a resposta principal diz: pare de usar essa unidade agora e tente recuperar os arquivos .jpg excluídos. Para isso, no entanto, prefiro recomendar o PhotoRec de código aberto e multiplataforma , que conhece muitos formatos de imagem (Jpg, mas também arquivos brutos diferentes, etc.) e é muito completo.
Olivier Dulac

Respostas:

45

Primeiro: pare de usar esta unidade agora . Não há problema em remontá-lo somente leitura, apenas certifique-se de não escrever mais nada. Sim, você excluiu as imagens. Eles podem ser recuperáveis, mas quanto mais você continuar usando essa unidade, menos chances terá de recuperar alguma coisa.

Seu comando foi executado mv pic1.jpg pictures, mv pic2.jpg picturesetc. Cada chamada de mvsubstituição do arquivo atualmente nomeado picturespor 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 com o novo nome. Portanto, nenhum dado do arquivo foi modificado ou excluído por este comando, apenas as entradas do diretório para as imagens que desapareceram.

Você pode executar uma ferramenta que vasculha o espaço livre do seu sistema de arquivos e procura coisas que parecem jpegs. Felizmente, todo arquivo jpeg começa com um cabeçalho reconhecível. As ferramentas que procuram conteúdo excluído são chamadas de ferramentas de escultura . Existem alguns no Ubuntu, incluindo recoverjpeg , acima de tudo , testdisk ,… Se as fotos estiverem em uma partição inicial separada ou em uma unidade externa, instale um 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 CD ou USB ativo e inicializá-lo. Qualquer um dos CDs ao vivo que incluem testdisk deve atender à demanda, mas alguns são mais fáceis de usar do que outros. O System Rescue CD é um bom CD de resgate de sistema de uso geral. O Ubuntu Rescue Remix pode ser mais familiar para um usuário do Ubuntu.


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

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

Além disso, se você colocar um /nome depois de 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 que não seja 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 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 esta linha ao seu ~/.bashrc. Em seguida:

mv **/*.jpg pictures/

(Observe que no bash **/também percorre links simbólicos para diretórios e não há como desativar isso. Se você deseja um percurso recursivo que não olha através de links simbólicos para diretórios, use zsh ou find.)

Gilles 'SO- parar de ser mau'
fonte
1
Você omitiu o /depois picturesno segundo conjunto de exemplos? Ou seja, não deveria ser mv foo.jpg pictures/(com o /) nos dois mvcomandos?
Paddy Landau
@PaddyLandau De fato, foi uma falha de copiar / colar ou editar muito ruim. Obrigado pelo relatório.
Gilles 'SO- stop be evil'
13

Receio que você tenha perdido todas as suas fotos naquele único arquivo. É possível recuperar alguns arquivos usando ferramentas forenses, como a principal, mas a taxa de sucesso diminui quanto mais tempo você usar a mídia (disco). (para ser mais preciso, quanto mais tempo a partição estiver montada .)

Da próxima vez, quando você se referir a um diretório, adicione uma barra e adicione a -iopção de pedir confirmação, caso já exista um arquivo:

find -name "*.jpg" -exec mv -i {} pictures/ {} \;
Lekensteyn
fonte
6
Sim, tenho que enfatizar novamente: ENTRE EM UM AMBIENTE DE CD AO VIVO IMEDIATAMENTE! Se você deseja recuperar esses arquivos, precisa parar de usar a unidade agora. E se você precisar baixar e gravar uma imagem, faça-o em outro computador. Quanto menos atividade acontecer neste disco, maior a chance de suas fotos serem restauradas.
Oli
Obrigado por isso. Eu vi sua resposta primeiro e imediatamente puxei o plugue da máquina e reiniciei com o meu disco de inicialização USB de inicialização múltipla.
Jtnewhou 11/05