在生产服务器上禁用rm *

有没有一种方法可以在生产服务器上用单个*来阻止rm ? 这将有助于防止事故,如:

 rm test * 

代替

 rm test* 

使用zsh —它会自动询问您是否要删除目录中的所有文件。

 server:~/dir/processing> rm * zsh: sure you want to delete all the files in /home/wheel/dja/dir/processing [yn]? 

(我认为这是一个默认function—我找不到任何configuration选项已被设置为打开它,但我没有写我的.zshrc)

这里有一个bash函数,它可以从.bashrc中获得,当你使用超过2个参数的rm时,会添加一个警告:

 unalias rm 2>/dev/null real_rm=/bin/rm rm_opts="" function confirm { echo -n "Do you want to continue (Y/N)? " read v v=$(echo $v|tr '[az]' '[AZ]') if [[ "$v" == "Y" ]]; then return 0 elif [[ "$v" == "N" ]]; then return 1 else confirm fi } function rm { if [ $# -gt 2 ]; then echo "WARNING: You have passed a list of files and directories that is $# entries long! Is this what you intended?" echo "Here is the list of files:" echo "$@" confirm if [ $? -eq 0 ]; then $real_rm $rm_opts $@ fi else $real_rm $rm_opts $@ fi } 

不是没有更换的shell。 rm甚至没有看到 *因为shell在将它们传递给rm之前会遍历相应的文件名。

不是解决scheme,而是小的解决方法。 别名rmrm -i

使用标志-f时,此解决方法无效。

你也可以提供一个特殊的别名,你所关心的用户将使这个错误可以使用。 例如

 alias rm-test="rm test*" 

再次,这是更多的工作,但是,一般来说*尼克斯假设你知道你在做什么,并意味着你要说什么。