如何停止 cp: overwrite './xxx' ? 提示

如何停止 cp: overwrite './xxx' ? 提示

我如何才能阻止 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”命令的更多信息。

相关内容