我开始使用“sudo rm -r”来删除文件/目录。我甚至把它作为rm的别名。
我通常知道自己在做什么,而且我非常体验linux用户。
但是,我希望当我按下“ENTER”时,在执行rm之前,屏幕上会显示一个文件列表,并在结束时提示确定删除文件。
选项-i -I -v没有做我想要的。我只想在屏幕上显示所有打印文件的一个提示。
谢谢。
答案 0 :(得分:4)
##
# 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脚本......
#!/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
之前是。 (也很危险)。但是你去吧。
答案 1 :(得分:2)
这是一个不错的选择
别名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评论更正了解决方案。我之前的解决方案有一个错误:(
答案 2 :(得分:1)
这个简单的脚本会在删除指定的文件之前提示y响应。
rmc脚本文件:
read -p "ok to delete? " ans
case $ans in
[yY]*) sudo rm "$@" ;;
*) echo "Nothing deleted";;
esac
这样调用
./rmc *.tmp
答案 3 :(得分:0)
我创建了一个脚本来执行此操作。解决方案与@ kojiro相似。
使用文件名del
保存脚本。运行命令sudo chmod a=r+w+x del
以使脚本成为可执行文件。在要保存脚本的目录中,通过在“〜/ .bashrc”文件中输入export PATH=$PATH:/path/to/the/del/executable
并导出source ~/.bashrc
来导出路径。
此处保留rm
的语法,但不是键入rm ...
,而是键入del ...
,其中del
是下面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