Linux

帶有萬用字元的 mv 仍然是原子的嗎

  • July 18, 2021

我的理解是mv dir1/file1 dir2/原子的,

mv dir1/* dir2/也是原子的嗎?

例如,假設其中有 10 個文件,dir1每個文件大小為 10GB。

讓我們mv從不總是原子的語句開始。

我們還要確定原子性是指文件內容,而不是文件名。

對於任何單個文件,mv只要文件在同一文件系統中移動,則執行的移動或重命名是原子的。原子性並不能保證文件只在一個地方或另一個地方;該文件很可能會在“短時間內”同時存在於兩個地方的文件系統中。原子性確實保證了,當提供時,文件內容是完全可用的,而不是部分可用的。您可以想像,mv在這種情況下,可以使用ln後跟來實現rm

mv當它執行的移動是從一個文件系統到另一個文件系統時,或者當遠端文件系統無法在mv本地實現操作時,它絕對不是原子的。在這些情況下mv,可以說是通過等價於 a 來實現cprm

現在,繼續討論跨多個文件的原子性問題。mv充其量僅對每個文件是原子的,因此如果您有多個文件要一起移動,則實現方式是一次移動一個。如果你喜歡,mv file1 dir; mv file2 dir; mv file3 dir.

如果您確實需要一組文件同時出現在目標中,請考慮將它們放在一個目錄中並移動該目錄。這個單個對象(目錄)可以自動移動。

引用自:https://serverfault.com/questions/676221