我正在尝试使用cp命令并强制覆盖。
cp
我已经尝试了cp -rf /foo/* /bar,但我仍然被提示确认每个覆盖。
cp -rf /foo/* /bar
您可能在某个地方有一个别名,映射cp到cp -i;因为在默认设置下,cp不会要求覆盖。检查你的.bashrc,你的.profile等。
cp -i
.bashrc
.profile
请参阅cp手册:只有当指定-i参数时,cp才会在覆盖之前实际提示。
-i
您可以通过alias命令检查:
alias
$ aliasalias cp='cp -i'alias diff='diff -u'....
要取消定义别名,请使用:
$ unalias cp
您可以执行yes | cp -rf xxx yyy,但我的直觉是,如果您以root身份执行此操作-您的.bashrc或.profile的别名为cp到cp -i,大多数现代系统(主要是RH衍生物)都会对root配置文件执行此操作。
yes | cp -rf xxx yyy
您可以通过在命令提示符下运行alias来检查现有的别名,或者which cp仅检查cp的别名。
which cp
如果您确实定义了别名,运行unalias cp将取消当前会话的别名,否则您可以将其从shell配置文件中删除。
unalias cp
您可以暂时绕过别名并使用命令的非别名版本,方法是在其前面加上\,例如\cp whatever
\
\cp whatever
这可能是因为cp已经别名为cp -i。直接调用cp应该有效:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
解决这个问题的另一种方法是使用yes命令:
yes
yes | cp -rf /zzz/zzz/* /xxx/xxx
正如其他一些答案所述,您可能在某个地方使用将cp映射到cp -i或类似的别名。您可以通过在命令前面加上反斜杠来运行没有任何别名的命令。在你的情况下,尝试
\cp -r /zzz/zzz/* /xxx/xxx
反斜杠将暂时禁用您调用cp的任何别名。
默认情况下,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
/bin/cp /from /to
cp /from /to
你也可以使用这个命令:
cp -ru /zzz/zzz/* /xxx/xxx
不过,它会使用较新的文件更新您现有的文件。
另一种不带别名调用命令的方法是在bash中使用command内置。
command
command cp -rf /zzz/zzz/*
cp通常是这样的
alias cp='cp -i' # i.e. ask questions of overwriting
如果您确定要进行覆盖,请使用以下命令:
/bin/cp <arguments here> src dest
它不是cp -i。如果您不想被要求确认,cp -n;例如:
cp -n
cp -n src dest
或者在目录/文件夹的情况下是:
cp -nr src_dir dest_dir
我只是使用unalias删除“cp-i”别名,然后复制,然后设置别名。
unalias cpcp -f foo foo.copyalias cp="cp -i"
不是最漂亮的代码,但易于设置和高效。我还检查别名是否已经用简单的方法设置回来
alias |grep cp
正如其他答案所述,如果cp是cp -i的别名,则可能会发生这种情况。
您可以在cp命令之前附加\以在没有别名的情况下使用它。
\cp -fR source target
-n是“不要覆盖”,但他的问题与你的回答完全相反。
为了避免这种确认,您可以简单地在绝对路径上运行cp命令,它将避免别名。
/bin/cp源文件目的地
如果您想按原样在全局级别保留别名,并且只想为您的脚本进行更改。
只需使用:
别名cp=cp
然后写下你的后续命令。
cp -u ...cp --update ...
也工作。
我找到了这个
'cp' -rf * /data/danalonso_testing/target/
来源:https://superuser.com/questions/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851
所以我经常遇到这个问题,因为我让cp别名cp -iv,我发现了一个巧妙的技巧。事实证明,虽然-i和-n都取消了以前的覆盖指令,但-f没有。然而,如果你使用-nf,它会增加清除-i的能力。所以:
cp -iv
-n
-f
-nf
cp -f /foo/* /bar <-- Promptcp -nf /foo/* /bar <-- No Prompt
很整洁吧? /necropost
最简单的方法:
yes | cp source destination
如果这是一个小文本文件,你也可以这样考虑:
cat my.cnf > /etc/my.cnf
不确定大型或二进制文件的效率或副作用。