BASH:如何在不覆盖旧文件的情况下复制文件

时间:2013-07-12 16:32:18

标签: bash unix rsync cp

我想知道如何在不覆盖旧文件的情况下复制文件,我没有-n开关可用。

就我所知,cp -u和rsync都会覆盖旧文件,我不想要这种行为,我想保留旧文件。

由于

3 个答案:

答案 0 :(得分:3)

您可以使用“--interactive”选项(来自我cp的{​​{1}})提示您覆盖并填写默认值:

GNU coreutils 6.12

答案 1 :(得分:1)

将文件复制到同一目录中新创建的临时文件(请参阅Linux下的mktemptempfile)。然后使用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

附加的数字最有可能阻止任何覆盖的机会。如果这还不够,那么可以在文件末尾添加任何他们想要的东西,比如时间戳。如果您仍然担心在这些措施后覆盖,那么您可能应该定期备份文件。