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 mv
se 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>