通过文件的 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 |