
我使用以下命令隱藏了一些檔案:
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
只會將一個檔案移動到一個檔案(重新命名)或將一個或多個檔案移動到一個目錄。它不會透過一些智慧重命名將多個檔案移動到多個檔案。
發生了什麼事?
假設我們的目錄中有 1 個目錄和 3 個檔案:
dir1
file1
file2
file3
某些 Shell(例如bash
、dash
、...)會將您的命令擴展為:
mv dir1 file1 file2 file3 . ..
您的擴充指令符合您在以下位置找到的概要的第二種形式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/^/./' *