python的shutil.move()在linux上是原子操作吗?

22 投票
1 回答
5417 浏览
提问于 2025-04-16 04:10

我在想,Python里的shutil.move在Linux系统上是不是原子操作?如果源文件和目标文件在不同的分区上,这个行为会不会有所不同?还是说在同一个分区上时表现是一样的?

我更关心的是,如果源文件和目标文件在同一个分区上,shutil.move是不是原子操作!

1 个回答

25

如果文件在不同的文件系统上,那就不是原子操作。也就是说,Python会先打开源文件和目标文件,然后循环读取源文件的内容并写入目标文件,最后再删除源文件。

但如果源文件和目标文件在同一个文件系统上,Python就会使用rename()这个C语言的调用,这样的操作是原子性的,也就是说要么全部成功,要么全部不做。

撰写回答