2

我开始使用“sudo rm -r”来删除文件/目录。我什至把它作为rm的别名。

我通常知道我在做什么,而且我是非常有经验的 linux 用户。

但是,我希望当我按“ENTER”时,在执行 rm 之前,屏幕上会显示一个文件列表,最后会提示确定删除文件。

选项 -i -I -v 不会做我想做的事。对于屏幕上的所有打印文件,我只需要一个提示。

谢谢你。

4

4 回答 4

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 脚本……</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(也很危险)。但是你去。

于 2013-07-23T19:50:25.427 回答
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 评论更正了解决方案。我以前的解决方案有一个错误:(

于 2013-07-23T20:36:48.103 回答
1

这个简单的脚本会在删除指定的文件之前提示任何响应。

rmc 脚本文件:

read -p "ok to delete? " ans
case $ans in
    [yY]*) sudo rm "$@" ;;
    *) echo "Nothing deleted";;
esac

如此调用

./rmc *.tmp
于 2013-07-23T19:35:57.513 回答
0

我创建了一个脚本来执行此操作。该解决方案类似于@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
于 2015-02-14T02:09:51.883 回答