我将所有数据移动到另一个文件夹并犯了 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>