'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
) 以查看您 运行.
的确切命令
都在标题里。
我找到了 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
) 以查看您 运行.