Wildcards

mv /tmp/folder/* /* 到底對我的文件系統做了什麼?

  • August 22, 2014

很難在Google上搜尋特殊字元,這就是我在這裡發布這個的原因。

我最近(以 root 身份)執行 amv /tmp/folder/* /*當我打算執行mv /tmp/folder/* ./大錯誤時!

事情鬧大了!很多文件被混淆並放置在奇怪的地方,沒有一個正常的 unix 命令起作用(ls、dir、cat 等),一旦你註銷,你就無法 ssh 重新登錄——它會給你一個提示,但不接受舊密碼。

執行ls /*顯示它對/. 如果我試圖畫一個平行線,那麼mv應該簡單地將文件移動(或複制?)到/. 相反,發生了非常奇怪的事情,我只是好奇到底發生了什麼。

更多資訊:/tmp/folder 中的文件是從 Windows 機器傳輸的,並被命名為文件 (#).txt,其中 (#) 是最多兩位數的數字,文件和括號之間有空格。這些文本文件大約有 40 個。

mv命令採用可能是文件或目錄的參數列表。如果最後一個參數是一個目錄,則所有其他參數都將移至該目錄。

在您的情況下,mv /tmp/folder/* /*擴展為mv <the list of files in /tmp/folder> <the list of files in />. 因此,正如您可能猜到的那樣,其中的所有文件/tmp/folders/以及除/ 最後一個之外的所有文件都被移動到/*(可能是/var)列出的最後一個文件夾中。

你想像mv的論點是錯誤的。從手冊頁:

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

mv需要很多SOURCE參數,但只有一個目的地DIRECTORYmv無法將文件移動到多個目的地,否則需要複製它。由於(如您所說)/*解析為 中的所有目錄/,所有這些(除了最後一個)都將添加到SOURCE列表中,因此您將所有這些目錄移動到命令行最後列出的目錄中。

如果您從 LiveCD 啟動並安裝驅動器,您可能可以消除損壞;根目錄中只剩下一個目錄(可能/var),您可以將根目錄中的所有目錄移出

引用自:https://unix.stackexchange.com/questions/79882