问题描述
$ cp ../dir_a/a.txt ../dir_b/a.txt
要在复制开始复制时将文件a.txt命名为a.tmp.txt,然后在复制所有文件时将其自动重命名为a.txt原始名称?我有一个Java程序,在完全从共享复制到共享之前,它消耗文件的速度太快,因此请注意消耗所有文件:
$ cp ../dir_a/a.txt ../dir_b/a.txt
$ ls ../dir_b/ #copying in progress
$ a.tmp.txt
$ ls ../dir_b/ #copying done
$ a.txt
谢谢
解决方法
复制到临时名称,然后重命名。重命名是原子的,因此不会有任何部分内容。
cp ../dir_a/a.txt ../dir_b/a.txt.temp
mv ../dir_b/a.txt.temp ../dir_b/a.txt