代码改变世界

Linux 资料管理器

2012-07-12 15:56  I Love Linux  阅读(124)  评论(2)    收藏  举报

  我喜欢手收集各种经典的文献,因此像txt,pdf,doc类型的文件保存的相当的多,大概有几个G吧。但后来发现平时想阅读这些文档时,查找想看的文档却成了难题。最近比较空闲,就在linux平台下用shell写了个资料管理器。下面是源代码:

#!/bin/bash

TXTFILEPATH=~/doc/txt
PDFFILEPATH=~/doc/pdf
TOPPATH=~/doc

init_program()
{
  if [ ! -d $TOPPATH ]
  then
    mkdir -p $TOPPATH
  fi
 
  if [ ! -d $TXTFILEPATH ]
  then
    mkdir -p $TXTFILEPATH
  fi

  if [ ! -d $PDFFILEPATH ]
  then
     mkdir -p $PDFFILEPATH
  fi
}

read_doc()
{
  DOCNAME=$1
  if [ -z $DOCNAME ]
  then
     echo "您输入的文件不存在!"
  else
    FILELIST=`find ~/doc | grep $DOCNAME`
    i=0
    for FILENAME in $FILELIST
    do
      if [ -f $FILENAME ]
      then
        i=`expr $i + 1`
        echo $i $FILENAME
      fi
    done
    echo -n "请选择您需要查看那哪个文件:"
    read SELECT
    FLAG_EXIST=`echo $SELECT | awk '{ if (match($0,"^[0-9]+$") != 0) print "true"; else print "false" }'`
    if [ $FLAG_EXIST = "true" ]
    then
      i=0
      FLAG_EXIST="no"
      for FILENAME in $FILELIST
      do
        if [ -f $FILENAME ]
        then
          i=`expr $i + 1`
          if [ $SELECT -eq $i ]
          then
             FLAG_EXIST="yes"
             SELECTFILE=$FILENAME
          fi
        fi
      done
      if [ $FLAG_EXIST = "yes" ]
      then
        echo "你选择了第${SELECT}个文件:$SELECTFILE"
        FILETYPE=`echo $SELECTFILE | cut -d"." -f2`
        echo "文件类型是:$FILETYPE"
        if [ $FILETYPE = "txt" ]
        then
            gedit $SELECTFILE &
        elif [ $FILETYPE = "pdf" ]
        then
           xdg-open $SELECTFILE &
        else
           gedit $SELECTFILE &
        fi
      else
         echo "选择超出了范围!"
      fi
    else
      echo "请输入数字!"
    fi
  fi
}

 

save_doc()
{
  SOURCE=$1
  if [ -z $SOURCE ]
  then
     echo "输入不能未空!"
  elif [ ! -f $SOURCE ]
  then
     echo "你输入的文件不存在,请查看那路径是否出错!"
  else
     FILETYPE=`echo $SOURCE | awk -F. '{print $NF}'`
     echo "文件类型是 $FILETYPE"
     if [ $FILETYPE = "txt" ]
     then
        mv $SOURCE $TXTFILEPATH
        if [ $? -eq 0 ]
        then
          echo "保存成功!"
        else
          echo "保存失败!"
        fi
     elif [ $FILETYPE = "pdf" ]
     then
        mv $SOURCE $PDFFILEPATH
        if [ $? -eq 0 ]
        then
          echo "保存成功!"
        else
          echo "保存失败!"
        fi
     else
        echo "未识别的文件类型,默认保存到txt下面"
        mv $SOURCE $TXTFILEPATH
        if [ $? -eq 0 ]
        then
          echo "保存成功!"
        else
          echo "保存失败!" 
        fi
     fi
  fi

}

 

list_doc()
{
  find $TOPPATH | less
}

 

del_doc()
{
  DOCNAME=$1
  if [ -z $DOCNAME ]
  then
     echo "您输入的文件不存在!"
  else
    FILELIST=`find ~/doc | grep $DOCNAME`
    i=0
    for FILENAME in $FILELIST
    do
      if [ -f $FILENAME ]
      then
        i=`expr $i + 1`
        echo $i $FILENAME
      fi
    done
    echo -n "请选择您需要删除的文件:"
    read SELECT
    FLAG_EXIST=`echo $SELECT | awk '{ if (match($0,"^[0-9]+$") != 0) print "true"; else print "false" }'` 
    if [ $FLAG_EXIST = "true" ]
    then
      i=0
      FLAG_EXIST="no"
      for FILENAME in $FILELIST
      do
        if [ -f $FILENAME ]
        then
          i=`expr $i + 1`
          if [ $SELECT -eq $i ]
          then
             FLAG_EXIST="yes"
             SELECTFILE=$FILENAME
          fi
        fi
      done
      if [ $FLAG_EXIST = "yes" ]
      then
        echo "你选择了第${SELECT}个文件:$SELECTFILE"
        rm $SELECTFILE  
        if [ $? -eq 0 ]
        then
          echo "删除成功!"
        else
          echo "删除失败!"
        fi
      else
         echo "选择超出了范围!"
      fi
    else
      echo "请输入数值!"
    fi
  fi  
}

 

help_doc()
{
echo "欢迎使用文档管理器!"
echo "这个软件可以方便您的资料管理!"
echo "存储文件轻输入(s),阅读文件请输入(r),查看文件列表请输入(l),删除存数文件请输入(d)"
echo "退出程序请选择(e)"
}

init_program

while getopts :s:r:ld:h OPTION
do
  case $OPTION in
   s) save_doc $OPTARG
   ;;
   r) read_doc $OPTARG
   ;;
   l) list_doc
   ;;
   d) del_doc $OPTARG
   ;;
   h) help_doc
   ;;
   \?) help_doc   
   ;;
   esac
done

  这段代码在ubuntu上可以正常运行,但在别的Linux版本,就不确定了。主要在于开启pdf文件的命令,在不同的Linux发行版本是不一样的吧。如果想移植到别的Linux发行版本请修改下read_doc函数开启pdf的那个语句既(xdg-open $SELECTFILE &)。

   运行本代码会在Home目录下创建doc文件夹,并在doc文件夹下面创建txt,和pdf文件夹。在txt里面将会保存以".txt“结尾的文件,pdf下将会保存以".pdf"结尾的文件。具体的用法如下:

   doc-manager -l  // 打印doc文件夹下面的所有文件列表

   doc-manager -s hello.txt  //保存hello.txt到~/doc/txt/下面

   doc-manager -r hello   //查找doc下面的所有文件,把文件名包含hello的文件列出,用户可以选择一个打开

   doc-manager -d hello // 查找doc下面的所有文件,把文件名包含hello的文件列出,用户可以选择一个删除

  这个程序现在还没有支持word文档,用户可以自己去修改代码,添加上去