Я использовал команду перемещения и все файлы исчезли

Я использовал команду перемещения и все файлы исчезли

Я перемещал все данные в другую папку и допустил одну ошибку и выполнил эту команду

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>

Связанный контент