Mv

如何防止“mv”將一組文件移動到一個正常文件中?

  • November 27, 2014

由於我犯了一個愚蠢的錯誤,我剛剛失去了我的音頻收藏的一小部分。:-(

很高興我有一個相當新的備份,但它仍然很煩人。除了你的真實情況,另一個惡作劇的罪魁禍首是mv,它將顯示如下:

音頻文件有一定的方案:

ARTIST - Some Title YY.mp3

其中YY是 2 位數年份規範。

mkdir 90<invisible control character>

(到現在為止,我還不知道我實際上輸入了三分之一的多餘字元,這是不可見的……!)

我不想將所有內容都放在一個目錄中,而是希望將所有 1990 年代的音樂都放在一個目錄中。所以我輸入:

find . -name '* 9?.mp3' -exec mv {} 90 \;

不難理解發生了什麼,嗯?:->

(災難性的)結果是一個名為“90 something ”的原始目錄(其中一些是“不可見的”控製字元)和一個名為“90”的單個文件,被覆蓋了n次。

所有文件都不見了。:-(( (明顯地)

Wishmv會及時檢查目標“文件”的簽名(請記住 NIX:Everything Is A Filed------ )是否以(例如)開頭drwxr-xr-x。而且,當然,目的地是否存在。上述情況有一個變體,當您只是先忘記*mkdir目錄時。(但當然,你假設它在那裡……)

甚至我們以大寫字母W開頭的討厭的作業系統也這樣做。如果您要求,甚至會提示您指定目標的類型(文件?目錄?)。

因此,我想知道我們 *NIXers 是否仍然必須為自己編寫一個“ mvscriptlet”來避免這些最不希望出現的意外。

/如果要將文件移動到目錄,可以將 a 附加到目標位置。如果目錄不存在,您將收到錯誤消息:

mv somefile somedir/
mv: cannot move ‘somefile’ to ‘somedir/’: Not a directory

如果目錄存在,它會將文件移動到該目錄中。

GNU coreutilsmv已經有一個選項指定您要移動到一個目錄:-t/ --target-directory。如果該選項的參數不存在,mv則會抱怨而不是將所有文件移動到相同的文件名。

我會這樣寫你的搬運工:

find . -name '* 9?.mp3' -exec mv -t 90 {} +

請注意使用+代替\;,將盡可能多的文件名放在一起,從而加快執行速度。

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