首页 文章

Linux如何复制但不能覆盖?

提问于
浏览
276

我想 cp 一个目录,但我不想覆盖任何现有的文件,即使它们比复制的文件旧 . 而且我想完全不受欢迎,因为这将是Crontab Bash脚本的一部分 . 有任何想法吗?

6 回答

  • 64

    取自man page

    -n, --no-clobber
                  do not overwrite an existing file (overrides a previous -i option)
    

    例:

    cp -n myoldfile.txt mycopiedfile.txt
    
  • 45

    考虑使用rsync .

    rsync -a -v --ignore-existing src dst
    

    根据评论 rsync -a -v src dst 不正确,因为它将更新现有文件 .

  • 418
    cp -n
    

    是你想要的 . 请参见手册页 .

  • 24

    对于那些发现没有选项的人(就像我在RedHat上一样),如果源比现有源(或者没有现有源)更新,则可以使用 cp -u 来仅写入文件 .

    [编辑]如评论中所述,这将覆盖旧文件,因此不是OP想要的 . 使用ceving的答案 .

  • 30

    这将适用于RedHat:

    false | cp -i source destination 2>/dev/null
    

    更新而不是覆盖是不同的 .

  • 6

    Alpine linux: 以下答案仅适用于单个文件的情况:在alpine cp -n 无法正常工作(以及 false | cp -i ... )所以解决方案在我的情况下工作,我发现:

    if [ ! -f env.js ]; then cp env.example.js env.js; fi
    

    在上面的例子中,我们检查 env.js 文件是否存在,如果不存在,我们将 env.example.js 复制为 env.js .

相关问题