cod*_*rti 14 filesystem command-line mv
我使用以下命令隐藏了一些文件:
mv * .*
Run Code Online (Sandbox Code Playgroud)
但现在我无法找到它们。我尝试使用:
mv .* *
Run Code Online (Sandbox Code Playgroud)
但什么也没发生(显示错误)。如果我运行:
ls -la
Run Code Online (Sandbox Code Playgroud)
它显示:
total 8
drwxrwxr-x 2 abhishek abhishek 4096 Mar 9 20:46 .
drwxrwxr-x 4 abhishek abhishek 4096 Mar 9 20:46 ..
Run Code Online (Sandbox Code Playgroud)
有什么办法可以恢复我的隐藏文件吗?
pLu*_*umo 45
您的文件并未隐藏,您已将所有文件(和目录,如果有)向上移动一个目录。
发生这种情况是因为mv * .*不会像您想象的那样工作。该命令mv只会将一个文件移动到一个文件(重命名)或将一个或多个文件移动到一个目录。它不会通过一些智能重命名将多个文件移动到多个文件。
发生了什么?
假设我们的目录中有一个目录和 3 个文件:
dir1
file1
file2
file3
Run Code Online (Sandbox Code Playgroud)
某些 Shell(例如bash, dash, ...)会将您的命令扩展为:
mv dir1 file1 file2 file3 . ..
Run Code Online (Sandbox Code Playgroud)
您的扩展命令适合您在man mv以下位置找到的 SYNOPSIS 的第二种形式:
mv [OPTION]... SOURCE... DIRECTORY
注意.和..:
. 是当前目录,.. 是一个目录。命令的意思是: move dir1, file1, file2and file3and .to ..; 它本质上也会给出一个错误,例如:
mv: cannot move '.' to '../.'
Run Code Online (Sandbox Code Playgroud)
但鉴于您对该目录具有写权限,所有其他文件都已被移动。您可以在..(= 上一级目录)中找到您的文件。但是,同名文件已被覆盖,您将不知道之前哪些文件位于哪个目录中。
如果您有一个子目录.hidden-dir,它将扩展为:
mv dir1 file1 file2 file3 . .. .hidden-dir
Run Code Online (Sandbox Code Playgroud)
然后,所有文件都将被移动到.hidden-dir. 但是,这对您来说似乎并非如此,因为您会.hidden-dir在ls -la输出中看到。
怎么修
跑:
dir1
file1
file2
file3
Run Code Online (Sandbox Code Playgroud)
但是,您需要知道这些名称。
你应该用过的
mv dir1 file1 file2 file3 . ..
Run Code Online (Sandbox Code Playgroud)
或者
mv: cannot move '.' to '../.'
Run Code Online (Sandbox Code Playgroud)