'mv *' 现在我找不到我的文件了

Did 'mv *' and now I can't find my files

都在标题里。

我找到了 mv *mv *.mkv(我不记得了),现在我找不到我的文件了。

我可以取回它们吗?

此处有几种可能性,具体取决于您 运行 命令时当前目录中的内容。但在此之前,我想介绍一下星号的作用。

*(通配符)

在 bash(据我所知,还有其他 shell)中,星号执行一种称为 globbing.

的文件名扩展

这基本上将参数扩展为多个与表达式匹配的参数。因此,如果您只有一个 * ,您将获得当前目录中的所有(非隐藏)文件作为参数。对于 *.mkv,它将扩展到所有以扩展名 .mkv.

结尾的文件的列表

mv *(有两个文件)

mv命令需要多个参数,通常与两个参数一起使用,将第一个参数(源)指定的路径中的文件移动到第二个参数(目标)指定的路径。一般来说,如果目标文件与源文件一起存在,这将替换目标文件。在这种情况下,恢复原始目标文件可能仍然是可能的,但需要文件恢复技术(即与使用 rm 删除文件相同)。

因此,如果您的目录中只有两个文件(或者两个 mkv 文件,如果您 运行 该命令),您将有效地删除其中一个文件。

但是,鉴于听起来您根本找不到这些文件,我认为发生了其他事情。

mv *(有很多文件)

如果目录中有两个以上的匹配文件,mv 会尝试将它们全部移动到最后一个参数表示的目录中。

从我刚刚做的测试来看,如果最后一个路径不表示目录并且什么都不做,它看起来会出错。

鉴于此,我认为您的文件可能没有问题,只是被移到了文件所在的子目录之一。我不是 100% 确定,但我认为它会是按字母顺序排列的最后一个。

例如,如果您的目录如下所示(subdir 是一个目录,而 file*.mkv 是文件):

$ ls
subdir  file1.mkv  file2.mkv  file3.mkv

还有你运行mv *。我希望你现在看到:

$ ls
subdir

在这种情况下,您的文件可能在子目录中:

$ ls subdir/
file1.mkv  file2.mkv  file3.mkv

如果您找不到 任何 个文件,即使在子目录中查找,您可能需要提供更多关于您正在做的事情的上下文,以便完全理解出发生了什么事。您可能还想搜索您的 bash 历史记录 (~/.bash_history) 以查看您 运行.

的确切命令