Linux 如何在没有确认的情况下强制cp覆盖
我试图使用Linux 如何在没有确认的情况下强制cp覆盖,linux,command-line,overwrite,cp,Linux,Command Line,Overwrite,Cp,我试图使用cp命令强制覆盖 我尝试了cp-rf/foo/*/bar,但仍会提示我确认每次覆盖。您可能在某个地方有一个别名,将cp映射到cp-I;因为使用默认设置,cp不会要求覆盖。检查您的.bashrc、您的.profile等 请参阅:仅当指定了-i参数时,cp才会在覆盖之前实际提示 您可以通过alias命令来检查这一点: $ alias alias cp='cp -i' alias diff='diff -u' .... yes | cp -rf /zzz/zzz/* /xxx/xxx 要
cp
命令强制覆盖
我尝试了
cp-rf/foo/*/bar
,但仍会提示我确认每次覆盖。您可能在某个地方有一个别名,将cp
映射到cp-I
;因为使用默认设置,cp
不会要求覆盖。检查您的.bashrc
、您的.profile
等
请参阅:仅当指定了-i
参数时,cp
才会在覆盖之前实际提示
您可以通过alias
命令来检查这一点:
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
yes | cp -rf /zzz/zzz/* /xxx/xxx
要取消定义别名,请使用:
$ unalias cp
你可以做
yes | cp-rf xxx yyy
,但我的直觉告诉我,如果你做根目录,你的。bashrc
或。profile
的别名是cp
到cp-i
,大多数现代系统(主要是RH衍生产品)都是这样做的
您可以通过在命令提示下运行alias
来检查现有别名,或者which cp
只检查cp
的别名
如果您确实定义了别名,那么在当前会话中运行unalias cp
将取消该别名,否则您可以将其从shell配置文件中删除
您可以暂时绕过别名并使用命令的非别名版本,方法是在其前面加上
\
,例如\cp无论什么,这可能是由于cp
已被别名化为类似cp-i
的内容。直接调用cp
应该可以:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
另一种解决方法是使用yes
命令:
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
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
您也可以使用此命令:
cp-ru/zzz/zzz/*/xxx/xxx
不过,它会用较新的文件更新现有文件。另一种不使用别名调用命令的方法是使用bash中的命令
命令cp-rf/zzz/zzz/*
cp
的别名通常如下
alias cp='cp -i' # i.e. ask questions of overwriting
如果确定要进行覆盖,请使用以下方法:
/bin/cp <arguments here> src dest
/bin/cp src dest
它不是cp-i
。如果你不想被要求确认,
它是cp-n
;例如:
cp -n src dest
如果是目录/文件夹,则为:
cp -nr src_dir dest_dir
我只是使用unalias删除“cp-I”别名,然后进行复制,然后设置回别名:
unalias cp
cp -f foo foo.copy
alias cp="cp -i"
不是最漂亮的代码,但易于设置且高效。我还检查了别名是否已经用简单的
alias |grep cp
正如其他答案所述,如果cp
是cp-i
的别名,则可能发生这种情况
您可以在cp
命令之前附加\
,以便在不使用别名的情况下使用它
\cp -fR source target
-n是“不覆盖”,但他的问题与你的回答完全相反
要避免此确认,只需使用绝对路径运行cp命令,它将避免别名
/bin/cp sourcefile destination如果您希望保持alias在全局级别上的原样,并且只想更改脚本
只需使用:
别名cp=cp
然后编写后续命令
cp -u ...
cp --update ...
同样有效。我找到了这个
'cp' -rf * /data/danalonso_testing/target/
来源:所以我经常遇到这个问题,因为我将cp别名保持为cp-iv
,我发现了一个巧妙的技巧。事实证明,虽然-i
和-n
都会取消以前的覆盖指令,但-f
不会。但是,如果使用-nf
,它会增加清除-i
的功能。因此:
cp -f /foo/* /bar <-- Prompt
cp -nf /foo/* /bar <-- No Prompt
cp-f/foo/*/bar是的,我做了unalias cp-I,现在它工作了。。感谢您宝贵的回复。我喜欢unix提供的yes
命令。令人捧腹的有一天我可能会使用它。是的,它有别名,很好的捕获:)您可以使用\cp调用原始cp,比记住路径/bin/cpYep更容易,这是另一种绕过别名的方法。有点干净利落!这样更安全。是的,我做了unalias cp-I,现在它工作了。。感谢您宝贵的回复。这只是“unalias cp”,如果您使用的是oh my zsh,那么cp-i别名可能来自常见别名。因此,请小心--即使别名不是直接用.bashrc编写的,如果此文件调用的任何其他内容最终调用了其他操作cp别名的内容,您也会遇到这种行为。通过“现代系统”他指的是RHEL/centos/fedora,或许还有其他的东西,Debian/Ubuntu没有别名cp。我更喜欢服务器上的RHEL,并使用fedora近十年,但在Nvidia杀死我的fedora安装后,Ubuntu的社区支持和切换回Gnome吸引了我。我是”\_(ツ)_/“
关于它。@RayFoss添加了一个(主要是RH衍生物)
备注:)执行unalias cp
并复制您需要复制的任何内容后,您可以通过执行alias cp='cp-i'
将alias设置回其默认值。然后,运行alias cp
,以便您可以验证它是否返回到默认alias。@zhouji如我的回答中所述,反冲会禁用别名。因此,不要调用aliascp
,\cp
将调用命令cp
。这似乎相当于运行命令cp
。其他人表示,系统将面向cp的用户符号链接到cp-i
,这意味着他们试图克服默认设置