通过文件的 inode 号来删除文件

通过文件的 inode 号来删除文件
   1 #!/bin/bash
   2 # idelete.sh: 通过文件的inode号来删除文件.
   3 
   4 #  当文件名以一个非法字符开头的时候, 这就非常有用了,
   5 #+ 比如 ? 或 -.
   6 
   7 ARGCOUNT=1                      # 文件名参数必须被传递到脚本中.
   8 E_WRONGARGS=70
   9 E_FILE_NOT_EXIST=71
  10 E_CHANGED_MIND=72
  11 
  12 if [ $# -ne "$ARGCOUNT" ]
  13 then
  14   echo "Usage: `basename $0` filename"
  15   exit $E_WRONGARGS
  16 fi  
  17 
  18 if [ ! -e "$1" ]
  19 then
  20   echo "File \""$1"\" does not exist."
  21   exit $E_FILE_NOT_EXIST
  22 fi  
  23 
  24 inum=`ls -i | grep "$1" | awk '{print $1}'`
  25 # inum = inode (索引节点) 号.
  26 # --------------------------------------------------------
  27 # 每个文件都有一个inode号, 这个号用来记录文件物理地址信息.
  28 # --------------------------------------------------------
  29 
  30 echo; echo -n "Are you absolutely sure you want to delete \"$1\" (y/n)? "
  31 # 'rm' 命令的 '-v' 选项也会问这句话.
  32 read answer
  33 case "$answer" in
  34 [nN]) echo "Changed your mind, huh?"
  35       exit $E_CHANGED_MIND
  36       ;;
  37 *)    echo "Deleting file \"$1\".";;
  38 esac
  39 
  40 find . -inum $inum -exec rm {} \;
  41 #                           ^^
  42 #        大括号就是"find"命令
  43 #+       用来替换文本输出的地方.
  44 echo "File "\"$1"\" deleted!"
  45 
  46 exit 0

你可能感兴趣的:(shell)