我使用了移动命令,所有文件都消失了

我使用了移动命令,所有文件都消失了

我将所有数据移动到另一个文件夹并犯了 1 个错误并运行此命令

mv * /*

现在所有文件都消失了。我怎样才能找到他们?或者它们被删除了?

答案1

所有通配符都由*shell 扩展并传递给命令。这意味着第一个星号被替换为当前工作目录中的文件,第二个星号被替换为 / 中的所有文件。你可以通过运行看到这一点

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”与目录 t1 和 t2 一起移动到目录 t3,即:

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>

相关内容