打造Linux命令行下的“回收站”

来源:互联网 发布:ai软件教学 编辑:程序博客网 时间:2024/05/23 00:41

Linux下也有回收站功能,但只在Gnome等桌面环境下面。在终端下面是用rm命令来删除文件,就是直接从硬盘上删除了。要是你一不小心删错了文件,只能采用一些极其复杂的数据恢复工具来补救,而且还不一定有效。我就有过这样的经历,一不小心删错了文件,以致几天的工作成果立马灰飞烟灭。这样的事情发生一次都太多了。我们得在错误中学会成长,为了避免悲剧再次发生,我写了一个具有回收站功能的删除脚本用来代替rm命令:

#!/bin/bash

if [ $# -eq 0 ]; then
  echo 'Usage: del file ...'
  exit
fi

if [ $1 = '.' -o $1 = '..' ]; then
  echo "Can't delete $1"
  exit
fi

for src_file in $@; do
  dst_dir="$HOME/.trashbin"
  src_filename=$(basename $src_file)
  dst_file="$dst_dir/$src_filename"
  log_file="$dst_dir/.log"

  #检查源文件是否存在
  if [ ! -e $src_file ]; then
    echo "/"$src_file/" dosen't exit"
    exit
  fi

  #创建目标文件夹
  if [ ! -e $dst_dir ]; then
    mkdir $dst_dir
  fi

  #选择合适的目标文件名
  new_file=$dst_file
  i=0
  while true; do
    if [ ! -e $new_file ]; then
      break
    fi
    new_file="$dst_file.$((++i))"
  done
  dst_file=$new_file

  #执行删除操作
  mv $src_file $dst_file

  #输出信息并写入日志文件
  echo "$src_file -> $dst_file"
  echo "[$(date +'%m-%d %H:%M')] $src_file -> $dst_file" >> $log_file
done

把以上内容保存一个可执行的脚本文件里面,如”delete”,并确保脚本所在目录被添加到PATH环境变量里面。当你要删除文件的时候,就用这个delete命令。该命令的用法和rm基本一致,支持一次删除多个文件,也支持”*”等通配符。删除的文件被保存到~/.trashbin目录里面,如果目录中已经存在相同名称的文件,就自动在新删除的文件后面加上”.1″、”.2″等以示区别。每删除一个文件,都会在~/.trashbin/.log写入一条日志信息,记录下时间和操作内容。在你要恢复被删除文件的时候,这些日志会提供很有价值的信息。

值得说明的是,这个脚本主要用于学习用途。我不保证这个脚本是完美无误的,如果有什么错误导致数据丢失,本人概不负责。

原创粉丝点击