Linux rm 命令删除文件到回收站 防止误删文件
全局配置:/etc/profile
当前用户:~/.bashrc
一、配置:
方式一:
1.建立一个存放 rm 后的目录:
sudo mkdir /Recycle_Bin
注意:目录名、目录路径都可以随意,就是注意目录所在磁盘的空间即可
2. 根据需要 全局配置 或 局部配置 里,添加 rm 删除文件到回收站
alias rm='mv -t /Recycle_Bin
注意点:
当删除文件和 /Recycle_Bin 里重名时,会被覆盖。
同名文件夹 则会提示 ”mv: 无法将'output' 移动至'/Recycle_Bin/output': 目录非空“

要先删除 /Recycle_Bin 里的同名文件夹,才能继续删除同名文件夹。
适合有些特殊需要的人,想保留一份内容的人使用。
方式二:(推荐)来源
1. 初步实现:
# 修改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 这个目录,很危险)
# 功能:修改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. 测试带参数的:
rm -f d.txt; rm -rf f.txt; rm -f ccc/ddd/; rm -rf ccc/
3. 删文件
rm ccc/ddd/a.txt ccc/ddd/b.txt
4.删文件夹
rm ccc/ddd/; rm ccc/ddd
注意: 测 2 、3 、4 之前都要执行一次 1 ,防止没有文件,执行测试报错,干扰测试结果。

-
四、使用
注意: 之后用 rm 删除文件(文件夹)不需要添加 -rf 参数
-
浙公网安备 33010602011771号