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