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

thi*_*114 604 linux command-line overwrite cp

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

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

fav*_*tti 1038

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

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

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

您可以暂时绕过别名并使用前缀为命令的非别名版本\,例如\cp whatever

  • 我使用linux已有10多年了,但从来没有意识到`\`到unalias.我曾经使用完整的路径; 像这样的`/ usr/bin/cp`.非常感谢你. (16认同)
  • favoretti - 你真棒!有用.:-)当我检查别名时,它列出别名cp ='cp -i',因为你建议我做unalias cp.现在我可以复制任何促销.它的帮助伙伴很棒.谢谢你.:-) (13认同)
  • 另外,要小心 - 即使别名没有直接写在.bashrc中,如果*what*else这个文件调用最终调用其他操作cp别名的东西,你将遇到这种行为. (3认同)
  • 通过"现代系统"他意味着RHEL/centos/fedora以及其他可能的东西,Debian/Ubuntu不会为cp添加别名.我更喜欢服务器上的RHEL并使用Fedora近十年了,但是在Nvidia杀死我的Fedora安装之后,Ubuntu的社区支持以及切换回Gnome的人都向我求助.关于它,我是`_ _(ツ)_ /¯`. (3认同)
  • @RayFoss添加了一个`(主要是RH衍生物)`备注:) (2认同)

pgl*_*pgl 266

这可能是cp因为已经混淆了类似的东西cp -i.cp直接打电话应该有效:

/bin/cp -rf /zzz/zzz/* /xxx/xxx
Run Code Online (Sandbox Code Playgroud)

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

yes | cp -rf /zzz/zzz/* /xxx/xxx
Run Code Online (Sandbox Code Playgroud)

  • 是的,我做了unalias cp -i,现在正在工作..感谢您的宝贵回复. (6认同)
  • 我喜欢unix提供的`yes`命令.热闹.有一天我可能会用它. (5认同)
  • 是的,它是别名,很不错:)您可以使用\ cp调用原始cp,比记住路径/ bin / cp更容易 (2认同)

Chr*_*ris 111

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

\cp -r /zzz/zzz/* /xxx/xxx
Run Code Online (Sandbox Code Playgroud)

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

  • @zhouji反弹会禁用别名,如我的回答中所述.因此,不是调用别名`cp`,而是`\ cp`将调用命令`cp`.这似乎相当于运行`command cp`. (2认同)

cod*_*ing 59

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

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

您可以通过以下alias命令检查:

$ alias
alias cp='cp -i'
alias diff='diff -u'
....
Run Code Online (Sandbox Code Playgroud)

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

$ unalias cp
Run Code Online (Sandbox Code Playgroud)

  • 另外,如果您使用 oh-my-zsh,则 cp -i 别名可能来自 common-aliases (2认同)

Arn*_*Roa 44

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

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

\cp -fR source target
Run Code Online (Sandbox Code Playgroud)

  • 克里斯5年前已经说过完全一样的话 (4认同)

Avs*_*riy 18

默认情况下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'
Run Code Online (Sandbox Code Playgroud)

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


Ada*_*ick 18

所以我经常遇到这种情况,因为我将 cp 别名为cp -iv,我发现了一个巧妙的技巧。事实证明,while-i-n两者都取消了之前的覆盖指令,-f但不会。但是,如果您使用-nf它会增加清除-i. 所以:

cp -f /foo/* /bar  <-- Prompt
cp -nf /foo/* /bar <-- No Prompt
Run Code Online (Sandbox Code Playgroud)

很整洁吧?/死尸

  • 它不会覆盖文件,只是抑制消息 (5认同)

mal*_*olm 17

对我来说最简单的方法:

yes | cp source destination
Run Code Online (Sandbox Code Playgroud)


小智 7

cp 通常是这样的别名

alias cp='cp -i'   # i.e. ask questions of overwriting
Run Code Online (Sandbox Code Playgroud)

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

/bin/cp <arguments here> src dest
Run Code Online (Sandbox Code Playgroud)

  • pgl在五年前已经说过完全相同的话 (2认同)

小智 6

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

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

/bin/cp 源文件目标


sof*_*amp 6

cp -u ...
cp --update ...
Run Code Online (Sandbox Code Playgroud)

也有效.


小智 5

你也可以使用这个命令:

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

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


Ste*_*nas 5

不带别名调用命令的另一种方法是使用commandbash中的内置函数。

command cp -rf /zzz/zzz/*