Я перемещал все данные в другую папку и допустил одну ошибку и выполнил эту команду
mv * /*
Все файлы теперь исчезли. Как их найти? Или они удалены?
решение1
Все подстановочные знаки, как и *
раскрываются оболочкой и передаются команде. Это означает, что первая звезда была заменена файлами в вашем текущем рабочем каталоге, а вторая заменена всеми файлами в /. Вы можете увидеть это, запустив
echo /*
В моей системе это приводит к
/bin /boot /dev /etc /home /lib /lib64 /lost+found /media
/misc /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var
Итак, ваша команда в итоге стала выглядеть примерно так:
mv file1 file2 ... ... ... /tmp /usr /var
который перемещает все в /var
. Конечно, то, что было последним, может отличаться в вашей системе. Что бы это ни было, вы, вероятно, найдете свои файлы там.
Я предполагаю, что вы работали как root. Если бы вы не работали, вы бы не смогли записать большинство каталогов в /, так что ничего бы не произошло. Будьте особенно осторожны, работая как root, и избегайте этого, когда это возможно.
решение2
Из этого я сделал хорошее наблюдение:
mkdir test; cd test; mkdir t1 t2 t3
cd ~/
mkdir testmove;
cd testmove;
touch abcd
mv * ~/test/*
Вот интересная часть: файл «abcd» перемещен в каталог t3 вместе с каталогами t1 и t2, а именно:
ls test
-> t3
cd t3
ls
t1 t2 abcd
Я понял, что когда мы пишем *, команда фактически расширяется и затем выполняется, поэтому команда mv расширяется как
mv abcd ~/test/t1 ~/test/t2 ~/test/t3
Таким образом, он взял t3 в качестве пункта назначения и переместил abcd,t1,t2 в t3.
Итак, отвечая на ваш вопрос, он будет в последнем каталоге в /
Из страницы руководства, mv
если у вас есть символическая ссылка
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::.
Вы можете искать свой файл, используяfind / -type f -name <filename>