#!/bin/bash
# 前期定义的删除文件的保存目录
archivedir="$HOME/delete-files"
# 删除命令
realrm="$(which rm)"
# 移动命令
move="$(which mv)"
# 当前所在目录
dest=$(pwd)
# 定义的删除文件的保存目录是否存在,如果不存目录,就异常退出,并提示
if [ ! -d $archivedir ] ; then
echo "$0: 没有删除文件或者目录 (通过日期排序):"
exit 1
fi
# 移动删除文件的目录里
cd $archivedir
如果没有参数,输出对应的所有删除文件,并退出
if [ $# -eq 0 ] ; then
echo "$0: 输出删除文件或者目录 (通过日期排序):"
#-FC 列出项目 按文件类型归类 目录后面加/ 可执行文件加* 连接文件加@
# 这里正则表达 将文件前面的日期删除
ls -FC | sed -e 's/\([[:digit:]][[:digit:]]\.\)\{5\}//g' \
-e 's/^/ /'
exit 0
fi
# 匹配文件 2> /dev/null 用于丢弃报错误 wc -l 统计个数
matches="$(ls -d *"$1" 2> /dev/null | wc -l)"
# 没有匹配的
if [ $matches -eq 0 ] ; then
echo "没有匹配 \"$1\" 在删除的目录中" >&2
exit 1
fi
# 如果匹配的大于1
if [ $matches -gt 1 ] ; then
echo "有很多的文件和目录在删除文件中"
index=1
# 遍历输出信息 和删除时间
for name in $(ls -td *$1)
do
datetime="$(echo $name | cut -c1-14 | awk -F. '{ print $5"/"$4" at "$3":"$2":"$1 }')"
filename="$(echo $name | cut -c16-)"
if [ -d $name ] ; then
filecount="$(ls $name | wc -l | sed 's/[^[:digit:]]//g')"
echo " $index) $filename (countents = ${filecount} items," \
" deleted = $datetime)"
else
size="$(ls -sdk1 $name | awk '{print $1}')"
echo " $index) $filename (size = ${size}kb,deleted = $datetime)"
fi
index=$(( $index + 1 ))
done
echo ""
echo -n "你想要恢复哪一个版本 $1 呢(0 退出)? [1]:"
# 读取用户需要恢复的版本
read desired
# 验证输入的必须只能有数字
if [ ! -z "$(echo $desired | sed 's/[[:digit:]]//g')" ] ; then
echo "$0 无效的输出恢复被取消" >&2
exit 1
fi
# 如果大于版本时候
if [ ${desired:=1} -ge $index ] ; then
echo "$0 版本恢复被取消,输入的值太大。" >&2
exit 1
fi
# 输入小于1 退出
if [ $desired -lt 1 ] ; then
echo "$0 版本恢复被取消" >&2
exit 1
fi
# 读取匹配的
restore="$(ls -td1 *"$1" | sed -n "${desired}p")"
# 如果对应的目录存在此文件
if [ -e "$dest/$1" ] ; then
echo "\"$1\" 已经存在,无法恢复。" >&2
exit 1
fi
# 文件复原
echo -n "文件复原 \"$1\" ..."
$move "$restore" "$dest/$1"
echo "恢复完成."
# 是否删除对应的文件
echo -n "是否删除这个版本的文件?[y] "
read answer
if [ ${answer:=y} = "y" ] ; then
$realrm -rf *"$1"
echo "已经删除了"
else
echo "此版本文件被保存"
fi
# 匹配的只有一项时候
else
if [ -e "$dest/$1" ] ;then
echo "\"$1\" 已经存在,无法恢复。" >&2
exit 1
fi
restore="$(ls -d *"$1")"
echo -n "文件复原 \"$1\" ..."
$move "$restore" "$dest/$1"
echo "恢复完成."
fi
exit 0
shell 处理被删除文件的归档
最新推荐文章于 2024-11-02 00:18:43 发布
本文介绍了一款基于Shell脚本实现的文件备份与恢复工具,该工具能够帮助用户管理和恢复已删除的文件。通过简单的命令行操作,用户可以查看、选择并恢复所需的文件版本,同时还可以选择是否保留已恢复的文件备份。
摘要由CSDN通过智能技术生成