usei o comando move e todos os arquivos desapareceram [duplicados]

1

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

mv * /*

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

    
por Guru 05.10.2013 / 20:55

2 respostas

3

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 substituída 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 foi passado pode variar em seu sistema. Seja o que for, você provavelmente encontrará seus arquivos lá.

Estou assumindo que você estava executando como root. Se você não fosse, 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.

    
por 05.10.2013 / 21:19
1

Eu 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 que o arquivo "abcd" é movido para o diretório t3 junto com os diretórios t1 e t2, isto é:

ls test
-> t3
cd t3
ls 
t1 t2 abcd

o que eu 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, ele tomou t3 como o destino e moveu abcd, t1, t2 para t3

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

Da página man de mv se você tiver symlink

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 pesquisar seu arquivo usando find / -type f -name <filename>

    
por 05.10.2013 / 21:18

Tags