带通配符的 mv 仍然是原子的吗

MR2*_*wer 7 linux bash mv

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

是否mv dir1/* dir2/还原子?

例如,假设有 10 个文件,dir1每个文件10GB。

roa*_*ima 22

让我们从mv并不总是原子的语句开始。

我们还要确定原子性是指文件内容,而不是文件名。

对于任何单个文件,如果mv文件在同一文件系统内移动,则由 执行的移动或重命名是原子的。原子性不保证文件只在一处或另一处;该文件很有可能同时出现在两个地方的文件系统中“很短的时间”。当提供时,原子性确实保证文件内容立即完全可用,而不是部分可用。您可以想象mv在这种情况下可以使用ln后跟实现rm

mv当它执行的移动是从一个文件系统到另一个文件系统时,或者当远程文件系统无法在mv本地实现操作时,它绝对不是原子的。在这些情况下mv,可以说是由等价的 acp后跟rm.

现在,继续讨论跨多个文件的原子性问题。mv每个文件最多只能是原子的,因此如果您有多个文件要一起移动,则实现将一次移动一个。如果你喜欢,mv file1 dir; mv file2 dir; mv file3 dir.

如果您确实需要一组文件同时出现在目标中,请考虑将它们放在一个目录中并移动该目录。这个单个对象(目录)可以自动移动。

  • @JohnKugelman 原子性保证文件不会部分位于一处或另一处;它要么完整,要么在文件系统中不存在。参见 [POSIX mv](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/mv.html) 和 [POSIX 重命名](http://pubs.opengroup.org/onlinepubs/9699919799/functions/rename。 html) 以获得准确的细节 (12认同)
  • '原子性不保证文件只在一个地方或另一个地方;文件很可能同时出现在两个地方的文件系统中“很短的时间”。-- 那么*原子性保证什么?这听起来一点也不原子。 (4认同)

cee*_*yoz 7

No.mv dir1/*与 相同mv dir1/file1 && mv dir1/file2 && mv dir1/fileN。每个单独的动作都是原子的,但不是完整的。

  • 解释不正确,但每个单独的动作都是原子的结论是正确的。该命令与 `mv dir1/file1 dir1/file2 dir1/file3....` 相同。 (5认同)