如何取回「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只會將一個檔案移動到一個檔案(重新命名)或將一個或多個檔案移動到一個目錄。它不會透過一些智慧重命名將多個檔案移動到多個檔案。


發生了什麼事?

假設我們的目錄中有 1 個目錄和 3 個檔案:

dir1
file1
file2
file3

某些 Shell(例如bashdash、...)會將您的命令擴展為:

mv dir1 file1 file2 file3 . ..

您的擴充指令符合您在以下位置找到的概要的第二種形式man mv

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

請注意...

  • .是目前目錄,
  • ..是上一級目錄。

此命令的意思是:移動dir1file1file2file3到;它本質上也會給出一個錯誤,例如:...

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/^/./' *

相關內容