我开始使用“sudo rm -r”来删除文件/目录。我什至把它作为rm的别名。
我通常知道我在做什么,而且我是非常有经验的 linux 用户。
但是,我希望当我按“ENTER”时,在执行 rm 之前,屏幕上会显示一个文件列表,最后会提示确定删除文件。
选项 -i -I -v 不会做我想做的事。对于屏幕上的所有打印文件,我只需要一个提示。
谢谢你。
##
# Double-check files to delete.
delcheck() {
printf 'Here are the %d files you said you wanted to delete:\n' "$#"
printf '"%s"\n' "$@"
read -p 'Do you want to delete them? [y/N] ' doit
case "$doit" in
[yY]) rm "$@";;
*) printf 'No files deleted\n';;
esac
}
这是一个 shell 函数,(如果使用得当)会做你想做的事。但是,如果您在当前 shell 中加载该函数,然后尝试将它与 一起使用sudo
,它不会按照您的预期执行,因为sudo
会创建一个单独的 shell。所以你需要把它变成一个 shell 脚本……</p>
#!/bin/bash
… same code as above …
# All this script does is create the function and then execute it.
# It's lazy, but functions are nice.
delcheck "$@"
…然后确保sudo
可以访问它。把它放在sudo
执行路径中的某个地方(取决于sudo
配置。)然后,如果你真的想精确地执行它,sudo rm -r *
你仍然需要命名脚本rm
,(我认为这很危险)并确保它的 PATH 是在你的 PATH之前。 /bin
(也很危险)。但是你去。
这是一个不错的选择
别名rm
_echo | xargs -p rm
该-p
选项的意思是“交互式”——它将显示整个命令(包括任何扩展的文件列表)并要求您确认
它不会询问递归删除的文件。但它将扩展rm * .o
到:
rm -rf * .o
rm -rf program.cc program.cc~ program program.o backup?... # NO NO NO NO NO!
这比收到错误要好得多
rm: .o file not found
编辑:根据 chepner 评论更正了解决方案。我以前的解决方案有一个错误:(
这个简单的脚本会在删除指定的文件之前提示任何响应。
rmc 脚本文件:
read -p "ok to delete? " ans
case $ans in
[yY]*) sudo rm "$@" ;;
*) echo "Nothing deleted";;
esac
如此调用
./rmc *.tmp
我创建了一个脚本来执行此操作。该解决方案类似于@kojiro 的。
使用文件名保存脚本del
。运行命令sudo chmod a=r+w+x del
使脚本成为可执行文件。在要保存脚本的目录中,通过输入export PATH=$PATH:/path/to/the/del/executable
“~/.bashrc”文件导出路径并运行source ~/.bashrc
.
rm
这里保留了 of 的语法,除了不键入rm ...
,键入del ...
wheredel
是下面的 bash 脚本的名称。
#! /bin/bash
# Safely delete files
args=("$@") # store all arguments passed to shell
N=$# # number of arguments passed to shell
#echo $@
#echo $#
#echo ${args[@]:0}
echo "Files to delete:"
echo
n=`expr $N - 1`
for i in `seq 0 $n`
do
str=${args[i]}
if [ ${str:0:1} != "-" ]; then
echo $str
fi
done
echo
read -r -p "Delete these files? [y/n] " response
case $response in
[yY][eE][sS]|[yY])
rm ${args[@]:0}
esac