首页 文章

如何在没有确认的情况下强制cp覆盖

提问于
浏览
500

我正在尝试使用 cp 命令并强制覆盖 .

我试过 cp -rf /foo/* /bar ,但仍然提示我确认每次覆盖 .

15 回答

  • 887

    你可以做 yes | cp -rf xxx yyy ,但我的gutfeeling说,如果你以root身份执行 - 你的 .bashrc.profile 的别名为 cpcp -i ,大多数现代系统(主要是RH衍生物)都会根据配置文件执行此操作 .

    您可以通过在命令提示符下运行 alias 来检查现有别名,或者 which cp 仅检查 cp 的别名 .

    如果确实定义了别名,则运行 unalias cp 将取消当前会话的别名,否则您只需将其从shell配置文件中删除即可 .

    您可以暂时绕过别名并使用命名的非别名版本,方法是在其前面添加 \ ,例如 \cp whatever

  • 5

    这可能是因为 cp 已经别名为 cp -i . 直接调用 cp 应该有效:

    /bin/cp -rf /zzz/zzz/* /xxx/xxx
    

    解决此问题的另一种方法是使用 yes 命令:

    yes | cp -rf /zzz/zzz/* /xxx/xxx
    
  • -2

    正如其他一些答案所述,你可能会使用一个别名,它将 cp 映射到 cp -i 或类似的东西 . 您可以通过在其前面加上反斜杠来运行没有任何别名的命令 . 在你的情况下,试试吧

    \cp -r /zzz/zzz/* /xxx/xxx
    

    反斜杠将暂时禁用您调用 cp 的任何别名 .

  • 221

    你可能在别处有一个别名,将 cp 映射到 cp -i ;因为使用默认设置, cp 不会要求覆盖 . 检查你的 .bashrc ,你的 .profile 等 .

    请参阅cp manpage:仅当指定 -i 参数时, cp 才会在覆盖之前实际提示 .

    您可以通过 alias 命令检查:

    $ alias
    alias cp='cp -i'
    alias diff='diff -u'
    ....
    

    要取消定义别名,请使用:

    $ unalias cp
    
  • 18

    正如其他答案所述,如果 cpcp -i 的别名,则可能会发生这种情况 .

    您可以在 cp 命令之前附加 \ 以使用它而不使用别名 .

    \cp -fR source target
    
  • 2

    默认情况下 cp 具有 cp -i 的别名 . 您可以检查它,键入 alias ,你可以看到一些像:

    alias cp='cp -i'
    alias l.='ls -d .* --color=auto'
    alias ll='ls -l --color=auto'
    alias ls='ls --color=auto'
    alias mv='mv -i'
    alias rm='rm -i'
    

    要解决此问题,请使用 /bin/cp /from /to 命令而不是 cp /from /to

  • 8

    cp 通常是这样的别名

    alias cp='cp -i'   # i.e. ask questions of overwriting
    

    如果您确定要进行覆盖,请使用以下命令:

    /bin/cp <arguments here> src dest
    
  • 36

    你也可以使用这个命令:

    cp -ru /zzz/zzz/* /xxx/xxx

    它会用更新的文件更新你现有的文件 .

  • 2

    在没有别名的情况下调用命令的另一种方法是在bash中使用 command builtin .

    command cp -rf /zzz/zzz/*

  • 92

    -n是“不要覆盖”,但他的问题完全与你回答的相反 .

    为了避免这种确认,您可以简单地使用绝对路径运行cp命令,它将避免别名 .

    /bin/cp sourcefile destination

  • 0

    如果您希望将别名保持在全局级别,只想更改脚本 .

    只需使用:

    alias cp=cp

    然后编写您的后续命令 .

  • 41
    cp -u ...
    cp --update ...
    

    也有效 .

  • 2

    我找到了这个

    'cp' -rf * /data/danalonso_testing/target/
    

    资料来源:https://superuser.com/questions/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851

  • 2

    我只是使用unalias删除“cp -i”别名,然后执行复制,然后设置别名 . :

    unalias cp  
    cp -f foo foo.copy  
    alias cp="cp -i"
    

    不是最漂亮的代码,但易于设置和高效 . 我也检查别名已经用简单的方法设置了

    alias |grep cp
    
  • 4

    它不是 cp -i . 如果您不想被要求确认,那就是 cp -n ;例如:

    cp -n src dest
    

    或者在目录/文件夹的情况下:

    cp -nr src_dir dest_dir
    

相关问题