Force overwrite with cp

Like any self-respecting engineer with butter fingers, I’ve taken out insurance in my bashrc by aliasing potentially destructive commands. -i asks me before clobbering a target, and -v enables verbose output:

$ alias
==> alias cp='cp -iv'
==> alias ln='ln -i'
==> alias mv='mv -iv'
==> alias rm='rm -iv'

These work almost too well. Sometimes, I fully intend to copy over a directory of files, but cp wants me to hit y for every single one:

$ cp ./source/* ./dest/
==> overwrite shima.markdown? (y/n [n])

mv has a ‘-f’ option, which forces mv not to prompt before overriding, even if -i or -n have been invoked. cp has no such option, so instead I piped yes to it!

$ yes | cp ./source/* ./dest/

Another (perhaps more sane) approach is temporarily disabling the alias, though that does mean other options for that command would also be disabled, such as verbosity or colour:

$ \cp ./source/* ./dest/

More astute readers would wonder why I’m overriding my own safeguards, thereby making them useless. Presumably I’d only do this when needed, and only after confirmation.


This is one of about 5000 posts on Rubénerd. View the home page for the latest, or related posts also tagged with:

If you liked this post, feel free to buy me a coffee, leave me a comment on Twitter, or email me at Thanks :).