通过文件的 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
第40句的参数 -inum是什么意思啊?我man find 的时候没有找到这个参数啊
阅读(1459) | 评论(0) | 转发(0) |