如何在“mv *.*”之后恢复文件?

如何在“mv *.*”之后恢复文件?

我使用以下命令隐藏了一些文件:

mv * .*

但现在我找不到它们。我尝试使用:

mv .* *

但什么也没发生(显示错误)。如果我运行:

ls -la

显示的是:

total 8  
drwxrwxr-x 2 abhishek abhishek 4096 Mar  9 20:46 .  
drwxrwxr-x 4 abhishek abhishek 4096 Mar  9 20:46 ..  

有什么方法可以恢复我的隐藏文件吗?

答案1

您的文件并未被隐藏,您已将所有文件(及目录,如果有)向上移动了一个目录。

发生这种情况是因为mv * .*不会像您想象的那样工作。该命令mv只会将一个文件移动到一个文件(重命名)或将一个或多个文件移动到一个目录。它不会通过一些智能重命名将多个文件移动到多个文件。


发生了什么?

假设我们有一个目录和目录中的 3 个文件:

dir1
file1
file2
file3

某些 Shell(例如bash,,dash...)会将您的命令扩展为:

mv dir1 file1 file2 file3 . ..

您的扩展命令适合您在以下位置找到的 SYNOPSIS 的第二种形式man mv

mv [OPTION]... SOURCE... DIRECTORY

注意...

  • .是当前目录,
  • ..位于上一级目录。

该命令的意思是:将dir1file1file2和移动到file3;它实际上也会出现错误,类似于:...

mv: cannot move '.' to '../.'

但鉴于您在该目录中拥有写入权限,所有其他文件都已移动。您可以在..(= 上一个目录)中找到您的文件。但是,同名文件已被覆盖,您不知道之前哪个文件位于哪个目录中。


如果你有一个子目录.hidden-dir,它将扩展为:

mv dir1 file1 file2 file3 . .. .hidden-dir

然后,所有文件都会被移动到.hidden-dir。但是,对于你来说,这似乎不是这种情况,因为你会.hidden-dirls -la输出中看到 。


怎么修

跑步:

mv ../dir1 ../file1 ../file2 ../file3 .

然而,您需要知道这些名字。


你应该使用什么

mmv '*' '.#1'

或者

rename 's/^/./' *

相关内容