¿Acabo de eliminar todo con find -exec mv?

26

Traté de resolver esto por mi cuenta. Aquí está el comando que usé en la terminal:

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

No creé un directorio llamado imágenes primero. Lo que sucedió fue que se creó un archivo llamado pictures.gif. ¿Encontró los archivos y luego los sobrescribió a medida que los movía?

¿Qué es este archivo pictures.gif que se ha creado como resultado de este comando?

¿Los archivos todavía están posiblemente en el disco en alguna parte?

jtnewhou
fuente
Lamento que te haya pasado y espero que puedas recuperar cosas. Desconcertado por el .gif, sería interesante saber qué sucedió allí.
SEngstrom
77
Si está escribiendo el nombre de un directorio, ¡agréguelo /! ¡Siempre! Entonces solo puede ser un directorio.
Lightness compite con Mónica
2
Como dice la respuesta principal: deja de usar esa unidad ahora e intenta recuperar los archivos .jpg eliminados. Para esto, sin embargo, prefiero recomendar el PhotoRec de código abierto y multiplataforma , que conoce muchos formatos de imagen (Jpg, pero también diferentes archivos sin formato, etc.) y es muy completo.
Olivier Dulac

Respuestas:

45

Primero: deje de usar esta unidad ahora . Está bien volver a montarlo de solo lectura, solo asegúrese de no escribir más. Sí, has borrado las fotos. Ellos pueden ser recuperables, pero cuanto más se siguen utilizando esa unidad, menos posibilidades hay que recuperar nada.

Su comando se ejecutó mv pic1.jpg pictures, mv pic2.jpg picturesetc. Cada invocación de mvsobrescribió el archivo actualmente nombrado picturespor otra imagen.

Mover un archivo (dentro del mismo sistema de archivos) significa separarlo del directorio que lo contiene y adjuntarlo al directorio de destino con el nuevo nombre. Por lo tanto, este comando no modificó ni eliminó los datos del archivo, solo las entradas del directorio de las imágenes que han desaparecido.

Puede ejecutar una herramienta que recorra el espacio libre de su sistema de archivos y busque cosas que parezcan archivos JPEG. Afortunadamente, cada archivo jpeg comienza con un encabezado reconocible. Las herramientas que buscan contenido eliminado se denominan herramientas de tallado . Hay algunos en Ubuntu, incluyendo recoveryjpeg , primero , testdisk , ... Si las fotos están en una partición doméstica separada o en una unidad externa, instale uno o más de esos paquetes y apúntelos a la partición con las imágenes eliminadas.

Si las fotos están en el disco de su sistema, debe dejar de usar su sistema de inmediato. Use otra computadora para descargar un CD o USB en vivo y arranque desde allí. Cualquiera de los CD en vivo que incluyen testdisk debería ajustarse a la factura, pero algunos son más fáciles de usar que otros. System Rescue CD es un buen CD de rescate de sistema de uso general. Ubuntu Rescue Remix puede ser más familiar para un usuario de Ubuntu.


Para referencia futura, adquiera el hábito de usar a mv -imenos que pretenda sobrescribir archivos. Es posible que ya tenga un alias para mv, pero eso solo se activa cuando escribe mvdirectamente en la línea de comando, no cuando mves invocado por un script o por el findcomando.

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

Además, si coloca un /después de un nombre que se supone que es el nombre de un directorio, recibirá un error si el directorio no existe o si hay un archivo con ese nombre que no es un directorio.

$ : >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 las trampas de find, puede utilizar la función de recorrido recursivo de directorio recursivo de bash. Primero debe activarlo con el comando shopt -s globstar(puede agregar esta línea a su ~/.bashrc. Luego:

mv **/*.jpg pictures/

(Tenga en cuenta que en bash, **/también atraviesa enlaces simbólicos a directorios, y no hay forma de desactivarlo. Si desea un recorrido recursivo que no mire a través de enlaces simbólicos a directorios, use zsh o find).

Gilles 'SO- deja de ser malvado'
fuente
1
¿Omitió el /after picturesen el segundo conjunto de ejemplos? Es decir, ¿no debería estar mv foo.jpg pictures/(con el /) en ambos mvcomandos?
Paddy Landau
@PaddyLandau De hecho, esta fue una muy mala falla al copiar o pegar. Gracias por el informe
Gilles 'SO- deja de ser malvado'
13

Me temo que acaba de perder todas sus imágenes en ese único archivo. Es posible recuperar algunos archivos usando herramientas forenses como la más importante, pero la tasa de éxito disminuye cuanto más tiempo use los medios (disco). (para ser precisos, cuanto más tiempo se monte la partición )

La próxima vez, cuando se refiera a un directorio, agregue una barra diagonal y agregue la -iopción de solicitar confirmación en caso de que ya exista un archivo:

find -name "*.jpg" -exec mv -i {} pictures/ {} \;
Lekensteyn
fuente
66
Sí, tengo que volver a enfatizar: ¡ ENTRE EN UN ENTORNO DE CD EN VIVO INMEDIATAMENTE! Si desea recuperar estos archivos, debe dejar de usar la unidad ahora. Y si necesita descargar y grabar una imagen, hágalo desde otra computadora. Cuanta menos actividad ocurra en este disco, mayores serán las posibilidades de que sus fotos sean restauradas.
Oli
Gracias por esto. Primero vi su respuesta e inmediatamente desconecté la máquina y la reinicié con mi disco de rescate USB de arranque múltiple.
jtnewhou