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.