Utilicé el comando mover y todos los archivos desaparecieron

Utilicé el comando mover y todos los archivos desaparecieron

Estaba moviendo todos los datos a otra carpeta y cometí un error y ejecuté este comando

mv * /*

Todos los archivos han desaparecido ahora. ¿Cómo puedo encontrarlos? ¿O se eliminan?

Respuesta1

Todos los comodines similares *son expandidos por el shell y pasados ​​al comando. Eso significa que la primera estrella fue reemplazada con los archivos en su directorio de trabajo actual y la segunda con todos los archivos en /. Puedes ver esto ejecutando

echo /*

En mi sistema, eso resulta en

/bin /boot /dev /etc /home /lib /lib64 /lost+found /media
/misc /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var

Entonces, tu comando terminó siendo algo como:

mv file1 file2 ... ... ... /tmp /usr /var

lo que mueve todo a /var. Por supuesto, lo que fue exactamente último puede variar en su sistema. Sea lo que sea, probablemente encontrarás tus archivos allí.

Supongo que estabas ejecutando como root. Si no lo fuera, no podría escribir la mayoría de los directorios en /, por lo que no habría pasado nada. Tenga mucho cuidado al ejecutar como root y evítelo cuando sea posible.

Respuesta2

Hice una buena observación de esto:

mkdir test; cd test; mkdir t1 t2 t3
cd ~/
mkdir testmove;
cd testmove;
touch abcd
mv * ~/test/*

Aquí está la parte interesante: el archivo "abcd" se mueve al directorio t3 junto con los directorios t1 y t2, es decir:

ls test
-> t3
cd t3
ls 
t1 t2 abcd

lo que entendí es que cuando escribimos * el comando en realidad se expande y luego se ejecuta, por lo que el comando mv se expande como

mv abcd ~/test/t1 ~/test/t2 ~/test/t3

Por lo tanto, tomó t3 como destino y movió abcd,t1,t2 a t3.

Entonces, para responder a su pregunta, estará en el último directorio en /

Desde la página de manual mvsi tiene un enlace simbólico

Avoid specifying a source name with a trailing slash,
when it might be a symlink to a directory.  Otherwise, `mv' may do
something very surprising, since its behavior depends on the underlying
rename system call.  On a system with a modern Linux-based kernel, it
fails with `errno=ENOTDIR'.  However, on other systems (at least
FreeBSD 6.1 and Solaris 10) it silently renames not the symlink but
rather the directory referenced by the symlink.  *Note Trailing
slashes::.

Puede buscar su archivo usandofind / -type f -name <filename>

información relacionada