我想知道如何在不覆盖旧文件的情况下复制文件,我没有-n开关可用。
就我所知,cp -u和rsync都会覆盖旧文件,我不想要这种行为,我想保留旧文件。
由于
答案 0 :(得分:3)
您可以使用“--interactive
”选项(来自我cp
的{{1}})提示您覆盖并填写默认值:
GNU coreutils 6.12
答案 1 :(得分:1)
将文件复制到同一目录中新创建的临时文件(请参阅Linux下的mktemp
或tempfile
)。然后使用ln
尝试为副本提供所需的名称。如果名称存在,ln
将失败;您可以尝试使用其他名称,或只是发出错误消息,或者其他什么。最后,删除临时名称。
答案 2 :(得分:-3)
这是一种非交互式方法。它检查文件是否存在(在初始附加随机数之后)。如果是,则查找另一个随机数。这可以通过不同方式进行重新设计。可以添加参数,等等。
copyfile() {
n=$RANDOM
while [ -f $1__$n ]
do
n=$RANDOM
done
cp $1 $1__$n
}
用法:
copyfile file_to_copy
您的文件将被命名为:
Originalfile.txt_20625
附加的数字最有可能阻止任何覆盖的机会。如果这还不够,那么可以在文件末尾添加任何他们想要的东西,比如时间戳。如果您仍然担心在这些措施后覆盖,那么您可能应该定期备份文件。