Usei o comando mover e todos os arquivos desapareceram

Usei o comando mover e todos os arquivos desapareceram

Eu estava movendo todos os dados para outra pasta e cometi um erro ao executar este comando

mv * /*

todos os arquivos desapareceram agora. Como posso encontrá-los? Ou eles são excluídos?

Responder1

Todos os curingas como *são expandidos pelo shell e passados ​​para o comando. Isso significa que a primeira estrela foi substituída pelos arquivos em seu diretório de trabalho atual e a segunda por todos os arquivos em /. Você pode ver isso executando

echo /*

No meu sistema, isso resulta em

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

Então, seu comando acabou sendo algo como:

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

que move tudo para /var. Claro, o que exatamente aconteceu por último pode variar em seu sistema. Seja o que for, você provavelmente encontrará seus arquivos lá.

Presumo que você estava executando como root. Do contrário, você não seria capaz de escrever a maioria dos diretórios em /, então nada teria acontecido. Seja extremamente cuidadoso ao executar como root e evite-o quando possível.

Responder2

Fiz uma boa observação disso:

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

Aqui está a parte interessante: o arquivo "abcd" é movido para o diretório t3 junto com os diretórios t1 e t2, ou seja:

ls test
-> t3
cd t3
ls 
t1 t2 abcd

o que entendi é que quando escrevemos * o comando realmente se expande e depois é executado para que o comando mv seja expandido como

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

Assim, tomou t3 como destino e moveu abcd,t1,t2 para t3

Então, para responder sua pergunta, ele estará no último diretório em /

Da página de manual mvse você tiver um link 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::.

Você pode procurar seu arquivo usandofind / -type f -name <filename>

informação relacionada