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 参数
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)