我使用以下命令隐藏了一些文件:
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
注意.
和..
:
.
是当前目录,..
位于上一级目录。
该命令的意思是:将dir1
、file1
和file2
和移动到file3
;它实际上也会出现错误,类似于:.
..
mv: cannot move '.' to '../.'
但鉴于您在该目录中拥有写入权限,所有其他文件都已移动。您可以在..
(= 上一个目录)中找到您的文件。但是,同名文件已被覆盖,您不知道之前哪个文件位于哪个目录中。
如果你有一个子目录.hidden-dir
,它将扩展为:
mv dir1 file1 file2 file3 . .. .hidden-dir
然后,所有文件都会被移动到.hidden-dir
。但是,对于你来说,这似乎不是这种情况,因为你会.hidden-dir
在ls -la
输出中看到 。
怎么修
跑步:
mv ../dir1 ../file1 ../file2 ../file3 .
然而,您需要知道这些名字。
你应该使用什么
mmv '*' '.#1'
或者
rename 's/^/./' *