有人知道在使用 cp 时如何关闭交互模式吗?
我正在尝试将一个目录递归复制到另一个目录中,并且对于每个被覆盖的文件,我都必须回答“y”。
我使用的命令是:
cp -r /usr/share/drupal-update/* /usr/share/drupal
但每次覆盖时我都会被要求确认:
cp: overwrite `./CHANGELOG.txt'? y
cp: overwrite `./COPYRIGHT.txt'? y
cp: overwrite `./INSTALL.mysql.txt'? y
cp: overwrite `./INSTALL.pgsql.txt'? y
...
我正在使用 ubuntu 服务器版本 jaunty。
谢谢!
答案1
执行:
alias cp
查看是否cp
已别名为cp -i
在这种情况下运行:
\cp -r /usr/share/drupal-update/* /usr/share/drupal
忽略别名
答案2
cp -f 不会要求确认(这是强制的),所以
cp -fr /usr/share/drupal-update/* /usr/share/drupal
答案3
是的,命令需要交互的原因cp
是因为在许多常见的 shell 中,默认情况下复制带有别名,cp -i
可以通过运行以下命令找到它:
alias cp
输出将是
alias cp='cp -i'
有不同的方法可以解决这个问题。解决方案是:
解决方案 1。在系统中为该会话设置别名/永久设置别名或卸载 cp 命令的别名。
取消设置别名:将删除该命令的别名。
unalias cp
或者
重置别名:
alias cp='cp'
上述命令将设置 的别名cp
本身cp
,而不是cp -i
。因此,您可以根据需要运行任意数量的复制命令,而无需仅在该终端上使用交互模式仅限会话(临时)。要使它永久生效,你可以在相应的文件中重置别名,例如
Bash – ~/.bashrc
ZSH – ~/.zshrc
Fish – ~/.config/fish/config.fish
解决方案 2。运行在复制命令开头cp
带有反斜杠的命令。\
\cp foo.log /tmp/
这将有效地忽略该命令的别名,cp
仅适用于该命令。
推理:cp
如果您打算运行大量命令并且想要关闭交互模式,则 解决方案 1 最好将其设置为临时或永久。
如果您只有几个cp
命令并且不想重置别名,那么解决方案 2 就很好了。