mv /tmp/folder/* /* 到底對我的文件系統做了什麼?
很難在Google上搜尋特殊字元,這就是我在這裡發布這個的原因。
我最近(以 root 身份)執行 a
mv /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
參數,但只有一個目的地DIRECTORY
。mv
無法將文件移動到多個目的地,否則需要複製它。由於(如您所說)/*
解析為 中的所有目錄/
,所有這些(除了最後一個)都將添加到SOURCE
列表中,因此您將所有這些目錄移動到命令行最後列出的目錄中。如果您從 LiveCD 啟動並安裝驅動器,您可能可以消除損壞;根目錄中只剩下一個目錄(可能
/var
),您可以將根目錄中的所有目錄移出