我如何才能阻止 cp 命令提示覆盖。我想覆盖所有文件而不必一直返回终端。因为这些文件很大,需要一些时间才能完成。
我尝试使用 -f 选项。它仍然询问我是否要覆盖。
-f, --force
if an existing destination file cannot be opened, remove it and
try again (redundant if the -n option is used)
cp -f /media/somedir/somefiles* .
cp: overwrite `./somefilesxxx'? y
答案1
除了拨打电话之外/bin/cp
,您还可以执行以下操作之一:
\cp -f ...
command cp -f ...
然而,我同意你不应该习惯使用像cp -i
或这样的别名rm -i
——如果你坐在不同的外壳上,你将失去你所依赖的安全网。
答案2
看到这个解决方案后,我发现是 bashes 别名功能导致了问题。 http://systembash.com/content/prompt-to-confirm-copy-even-with-cp-f/
which cp
alias cp='cp -i'
/bin/cp
which cp | grep cp
alias cp='cp -i'
/bin/cp
他建议
unalias cp
我仍然想保留别名,只是不想让它应用于此实例。我的解决方案是使用具有完整路径的二进制文件,这样 bashes 别名函数就不会接管。效果很好。
/bin/cp -f /media/somedir/somefiles* .
答案3
不幸的是,在 Linux 上,复制“cp”命令没有选项可以自动用“y”或“n”回答这个问题。根据您要执行的操作,有多种解决方案可以解决此问题。一种解决方案是使用 Unix“yes”命令。此命令将重复输出一个字符串,直到被终止。
如果我们想覆盖目标目录中的所有文件,您可以使用“yes”命令以“y”回答所有问题。“y”是默认值,因此不必指定。
yes | cp source/*.txt destination/.
如果我们想避免覆盖目标目录中的任何文件,您可以使用“yes”命令来回答所有以否“n”开头的问题。
yes n | cp source/*.txt destination/.
使用“man yes”获取有关“yes”命令的更多信息。