首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BASH:如何在不覆盖旧文件的情况下复制文件

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

Stack Overflow用户
提问于 2013-07-13 00:32:18
回答 3查看 3.9K关注 0票数 2

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

据我所知,cp -u和rsync都会覆盖较旧的文件,我不希望出现这种行为,我希望始终保留较旧的文件。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-13 00:35:59

您可以使用"--interactive“选项(来自GNU coreutils 6.12的”我的cp“中的)在覆盖之前提示您,并使用默认值填充它:

代码语言:javascript
复制
echo 'n' | cp --interactive ~/somefile.txt ~/somefile_already_exists.txt
票数 3
EN

Stack Overflow用户

发布于 2013-07-13 01:01:51

将文件复制到同一目录下新创建的临时文件中(参见Linux下的mktemp或tempfile )。然后使用ln尝试为副本指定所需的名称。如果该名称存在,则ln将失败;您可以尝试使用其他名称,或者只是发出一条错误消息,或者诸如此类。最后,删除临时名称。

票数 1
EN

Stack Overflow用户

发布于 2013-07-13 00:36:53

这是一种非交互式方法。它检查文件是否存在(在最初追加随机数之后)。如果是,那么它会寻找另一个随机数。这可以用不同的方式修改。可以添加参数,等等。

代码语言:javascript
复制
   copyfile() {
      n=$RANDOM
      while [ -f $1__$n ]      
       do
       n=$RANDOM
       done
       cp $1 $1__$n
    }

用法:

代码语言:javascript
复制
copyfile file_to_copy

您的文件将命名为类似如下的名称:

Originalfile.txt_20625

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

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17619678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档