我正在尝试使用 cp 命令并强制覆盖 .
cp
我试过 cp -rf /foo/* /bar ,但仍然提示我确认每次覆盖 .
cp -rf /foo/* /bar
你可以做 yes | cp -rf xxx yyy ,但我的gutfeeling说,如果你以root身份执行 - 你的 .bashrc 或 .profile 的别名为 cp 到 cp -i ,大多数现代系统(主要是RH衍生物)都会根据配置文件执行此操作 .
yes | cp -rf xxx yyy
.bashrc
.profile
cp -i
您可以通过在命令提示符下运行 alias 来检查现有别名,或者 which cp 仅检查 cp 的别名 .
alias
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 ;因为使用默认设置, cp 不会要求覆盖 . 检查你的 .bashrc ,你的 .profile 等 .
请参阅cp manpage:仅当指定 -i 参数时, cp 才会在覆盖之前实际提示 .
-i
您可以通过 alias 命令检查:
$ alias alias cp='cp -i' alias diff='diff -u' ....
要取消定义别名,请使用:
$ unalias cp
正如其他答案所述,如果 cp 是 cp -i 的别名,则可能会发生这种情况 .
您可以在 cp 命令之前附加 \ 以使用它而不使用别名 .
\cp -fR source target
默认情况下 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 通常是这样的别名
alias cp='cp -i' # i.e. ask questions of overwriting
如果您确定要进行覆盖,请使用以下命令:
/bin/cp <arguments here> src dest
你也可以使用这个命令:
cp -ru /zzz/zzz/* /xxx/xxx
它会用更新的文件更新你现有的文件 .
在没有别名的情况下调用命令的另一种方法是在bash中使用 command builtin .
command
command cp -rf /zzz/zzz/*
-n是“不要覆盖”,但他的问题完全与你回答的相反 .
为了避免这种确认,您可以简单地使用绝对路径运行cp命令,它将避免别名 .
/bin/cp sourcefile destination
如果您希望将别名保持在全局级别,只想更改脚本 .
只需使用:
alias 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
我只是使用unalias删除“cp -i”别名,然后执行复制,然后设置别名 . :
unalias cp cp -f foo foo.copy alias cp="cp -i"
不是最漂亮的代码,但易于设置和高效 . 我也检查别名已经用简单的方法设置了
alias |grep cp
它不是 cp -i . 如果您不想被要求确认,那就是 cp -n ;例如:
cp -n
cp -n src dest
或者在目录/文件夹的情况下:
cp -nr src_dir dest_dir
15 回答
你可以做
yes | cp -rf xxx yyy
,但我的gutfeeling说,如果你以root身份执行 - 你的.bashrc
或.profile
的别名为cp
到cp -i
,大多数现代系统(主要是RH衍生物)都会根据配置文件执行此操作 .您可以通过在命令提示符下运行
alias
来检查现有别名,或者which cp
仅检查cp
的别名 .如果确实定义了别名,则运行
unalias cp
将取消当前会话的别名,否则您只需将其从shell配置文件中删除即可 .您可以暂时绕过别名并使用命名的非别名版本,方法是在其前面添加
\
,例如\cp whatever
这可能是因为
cp
已经别名为cp -i
. 直接调用cp
应该有效:解决此问题的另一种方法是使用
yes
命令:正如其他一些答案所述,你可能会使用一个别名,它将
cp
映射到cp -i
或类似的东西 . 您可以通过在其前面加上反斜杠来运行没有任何别名的命令 . 在你的情况下,试试吧反斜杠将暂时禁用您调用
cp
的任何别名 .你可能在别处有一个别名,将
cp
映射到cp -i
;因为使用默认设置,cp
不会要求覆盖 . 检查你的.bashrc
,你的.profile
等 .请参阅cp manpage:仅当指定
-i
参数时,cp
才会在覆盖之前实际提示 .您可以通过
alias
命令检查:要取消定义别名,请使用:
正如其他答案所述,如果
cp
是cp -i
的别名,则可能会发生这种情况 .您可以在
cp
命令之前附加\
以使用它而不使用别名 .默认情况下
cp
具有cp -i
的别名 . 您可以检查它,键入alias
,你可以看到一些像:要解决此问题,请使用
/bin/cp /from /to
命令而不是cp /from /to
cp
通常是这样的别名如果您确定要进行覆盖,请使用以下命令:
你也可以使用这个命令:
cp -ru /zzz/zzz/* /xxx/xxx
它会用更新的文件更新你现有的文件 .
在没有别名的情况下调用命令的另一种方法是在bash中使用
command
builtin .command cp -rf /zzz/zzz/*
-n是“不要覆盖”,但他的问题完全与你回答的相反 .
为了避免这种确认,您可以简单地使用绝对路径运行cp命令,它将避免别名 .
/bin/cp sourcefile destination
如果您希望将别名保持在全局级别,只想更改脚本 .
只需使用:
alias cp=cp
然后编写您的后续命令 .
也有效 .
我找到了这个
资料来源:https://superuser.com/questions/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851
我只是使用unalias删除“cp -i”别名,然后执行复制,然后设置别名 . :
不是最漂亮的代码,但易于设置和高效 . 我也检查别名已经用简单的方法设置了
它不是
cp -i
. 如果您不想被要求确认,那就是cp -n
;例如:或者在目录/文件夹的情况下: