Linux
帶有萬用字元的 mv 仍然是原子的嗎
我的理解是
mv dir1/file1 dir2/
原子的,
mv dir1/* dir2/
也是原子的嗎?例如,假設其中有 10 個文件,
dir1
每個文件大小為 10GB。
讓我們
mv
從不總是原子的語句開始。我們還要確定原子性是指文件內容,而不是文件名。
對於任何單個文件,
mv
只要文件在同一文件系統中移動,則執行的移動或重命名是原子的。原子性並不能保證文件只在一個地方或另一個地方;該文件很可能會在“短時間內”同時存在於兩個地方的文件系統中。原子性確實保證了,當提供時,文件內容是完全可用的,而不是部分可用的。您可以想像,mv
在這種情況下,可以使用ln
後跟來實現rm
。
mv
當它執行的移動是從一個文件系統到另一個文件系統時,或者當遠端文件系統無法在mv
本地實現操作時,它絕對不是原子的。在這些情況下mv
,可以說是通過等價於 a 來實現cp
的rm
。現在,繼續討論跨多個文件的原子性問題。
mv
充其量僅對每個文件是原子的,因此如果您有多個文件要一起移動,則實現方式是一次移動一個。如果你喜歡,mv file1 dir; mv file2 dir; mv file3 dir
.如果您確實需要一組文件同時出現在目標中,請考慮將它們放在一個目錄中並移動該目錄。這個單個對象(目錄)可以自動移動。