文章目录
- 让 Linux 拥有回收站:轻松找回误删文件的完美解决方案
- 方案设计
- 编写 `trash` 脚本
- 定期清理回收站
- 总结
辛苦您也关注下公众号,感谢!
让 Linux 拥有回收站:轻松找回误删文件的完美解决方案
在 Linux 系统中,使用 rm
命令删除文件后,文件通常会被直接从系统中移除,难以恢复。为了避免误删文件的风险,我们可以通过编写一个 Shell 脚本,在 Linux 上实现类似 Windows 系统的回收站功能。
方案设计
实现 Linux 下的回收站功能的基本思路是:将用户“删除”的文件或目录移动到一个指定的目录(如 ~/.trash
),而不是直接删除。这样,用户可以在误删后从回收站中找回文件。为防止回收站占用过多磁盘空间,还需要设计一个自动清理过期文件的机制。
编写 trash
脚本
接下来,我们编写一个名为 trash
的 Shell 脚本,替代系统默认的 rm
命令。该脚本的作用是将用户想要删除的文件移动到回收站目录,并为文件添加时间戳以防止重名。
#!/bin/bash
# 回收站目录
TRASH_DIR="$HOME/.trash"
# 确保回收站目录存在
if [ ! -d "$TRASH_DIR" ]; then
mkdir -p "$TRASH_DIR"
fi
# 检查是否提供了文件名参数
if [ $# -eq 0 ]; then
echo "Usage: $0 file_or_directory"
exit 1
fi
# 遍历所有传递的参数
for FILE in "$@"; do
if [ -e "$FILE" ]; then
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BASENAME=$(basename "$FILE")
NEW_NAME="$BASENAME-$TIMESTAMP"
mv "$FILE" "$TRASH_DIR/$NEW_NAME"
else
echo "'$FILE' does not exist!"
fi
done
将该脚本保存为 ~/bin/trash.sh
,并赋予其可执行权限:
chmod +x ~/bin/trash.sh
为了方便使用,可以将系统默认的 rm
命令通过别名替换为 trash
脚本。编辑 ~/.bashrc
或 ~/.zshrc
文件,添加以下内容:
alias rm=~/bin/trash.sh
更新终端配置后,用户可以像往常一样使用 rm
命令“删除”文件,例如:
rm myfile.txt
此操作将文件 myfile.txt
移动到 ~/.trash
目录,并在文件名后添加时间戳以避免重名冲突。
定期清理回收站
为了防止回收站占用过多的磁盘空间,我们可以编写一个脚本定期清理回收站中过期的文件。例如,可以删除超过30天的文件:
#!/bin/bash
# 回收站目录
TRASH_DIR="$HOME/.trash"
# 删除30天前的文件
find "$TRASH_DIR" -type f -mtime +30 -exec rm -f {} \;
echo "Trash cleaned up."
将该脚本保存为 ~/bin/clean_trash.sh
,并赋予其可执行权限:
chmod +x ~/bin/clean_trash.sh
为了让清理任务自动化执行,可以将此脚本添加到 crontab
中,例如每天运行一次:
(crontab -l ; echo "0 0 * * * ~/bin/clean_trash.sh") | crontab -
此 crontab
任务将在每天凌晨0点运行 clean_trash.sh
脚本,自动清理回收站。
总结
通过以上步骤,我们在 Linux 系统中实现了一个简单且实用的回收站功能,并设置了自动清理过期文件的机制。这种方法不仅提高了误删文件的恢复能力,还能有效管理磁盘空间。根据实际需求,这一方案还可以进一步扩展和优化,例如增加文件恢复功能或自定义文件的保留时间等。