Linux rm 命令删除文件到回收站 防止误删文件

全局配置:/etc/profile

当前用户:~/.bashrc

 

一、配置:

方式一:

1.建立一个存放 rm 后的目录: 

1
sudo mkdir /Recycle_Bin

  注意:目录名、目录路径都可以随意,就是注意目录所在磁盘的空间即可

 

2. 根据需要 全局配置 或 局部配置  里,添加 rm  删除文件到回收站

1
alias rm='mv -t /Recycle_Bin

注意点:

当删除文件和 /Recycle_Bin  里重名时,会被覆盖。

同名文件夹 则会提示 ”mv: 无法将'output' 移动至'/Recycle_Bin/output': 目录非空

 要先删除 /Recycle_Bin 里的同名文件夹,才能继续删除同名文件夹。

适合有些特殊需要的人,想保留一份内容的人使用。

 

方式二:(推荐)来源

1. 初步实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 修改rm命令将文件删除至回收站
trash(){
    del_date=`date +%Y%m%d%H%M%S`
    # 循环是因为可能rm多个文件
    for arg in "$@"
    do
       # 这里将删除时间加入到文件名后是因为mv命令不能覆盖非空目录以及不能使用文件覆盖文件夹
       # 加上时间就不会有同名的文件了
       mv $arg ~/.local/share/Trash/files/$arg-${del_date}
    done
}
 
alias rm=trash
alias rl='ls ~/.local/share/Trash/files/'

注意:

  1.当你的 系统安装了桌面版, ~/.local/share/Trash/files/  路径,就是你桌面上的回收站,在命令行 rm 删除的文件,可以在 桌面上回收站里看到。

     2. 删除时不用加  -f   和 -rf 参数;

     3. 删除文件夹时,不要在结尾加 / 

----------------

2. 升级:

上面代码删除文件夹时,如果结尾带 /  就会报错:

 原因:改名字时,/ 被解释成为路径了。

 

将代码升级,为下面的:

 1) 删除 文件 和 文件夹 分开控制(不分开,删除文件时,也会变成删除文件夹)。

 2) 将原来 mv  移动和改名 一步完成,改成 两步 完成。

 3)删除前,先判断文件或目录是否存在,如果,不存在就跳过。

  (如果不加就会删除上层目录,如 rm  /home/ab/a.txt 如果a.txt不存在,就是删除 ab 这个目录,很危险)

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 功能:修改rm命令将文件删除至指定文件夹(回收站)
# 使用:将内容添加到用户 ‘家’ 目录下 .bashrc 文件中
# 来源:https://www.cnblogs.com/wutou/p/17415796.html
# BY: 吾透
 
trash(){
    del_date=`date +%Y%m%d%H%M%S`
    # 循环是因为可能rm多个文件
    for arg in "$@"
    do
        # 这里将删除时间加入到文件名后是因为mv命令不能覆盖非空目录以及不能使用文件覆盖文件夹
        # 加上时间就不会有同名的文件了
        if [ "-f" = "$arg" ] || [ "-rf" = "$arg" ] || [ "-fr" = "$arg" ];then
        {
                ## 跳过用户输入参数
                continue
        }
        fi
        if [ -e $arg ];then    ## 文件或目录存在才删除
      {
            if [ -f $arg ];then
            {
                    ## 删文件
                    mv  $arg /Recycle_Bin/
                    arg=${arg##*/}    ## ccc/ddd/a.txt -> a.txt
                    mv /Recycle_Bin/$arg /Recycle_Bin/$arg-${del_date}
            }
            else
            {
                    ## 删文件夹
                    arg=${arg%/*}   ## aaa/bbb/ -> aaa/bbb
                    mv -t /Recycle_Bin/ $arg
                    arg=${arg#*/}  ## aaa/bbb -> bbb
                    mv /Recycle_Bin/$arg /Recycle_Bin/$arg-${del_date}
            }
            fi
        }
        else
       {
            echo "[err] No such file or directory!!!"
            continue
       }
    fi
    done
}
 
alias rm=trash
alias rl='ls ~/.local/share/Trash/files/'   

  

  这样让用户就会无感了

 

二、生效:必须要做

已经登录终端的,可以用 source ~/.bashrc 或  . ~/.bashrc 生效(命令二选一),或者 重新登录终端生效

 

三、测试验证

1. 创建一些测试 文件和文件夹

. ~/.bashrc ; mkdir -p ccc/ddd; echo "aaabbb" >ccc/ddd/a.txt; echo "bb" >ccc/ddd/b.txt; echo "ccc" >ccc/c.txt; echo "d" >d.txt; echo "f"> f.txt ; ll; ll ccc/ ; ll ccc/ddd/ 

 

2. 测试带参数的:

1
rm -f d.txt; rm -rf f.txt; rm -f ccc/ddd/; rm -rf ccc/

3. 删文件

1
rm ccc/ddd/a.txt ccc/ddd/b.txt

4.删文件夹 

1
rm ccc/ddd/; rm ccc/ddd

  注意: 测 2 、3 、4 之前都要执行一次 1 ,防止没有文件,执行测试报错,干扰测试结果。

 

-

 

 

 

四、使用

注意: 之后用 rm 删除文件(文件夹)不需要添加 -rf 参数 

 

 

 

 

-

posted @   悟透  阅读(1436)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示