然后想用下面的命令来完成删除功能:
cd /绝对路径/目录下/
find ./ -type d -mtime N -exec rm -rf {} \;
虽然这句指令能执行,可是if N = 1 then find命令会找到“./”为名字的本目录文件夹,发现在删除的时候会报一个“rm: ./: Permission denied”的错误,虽然这样也能将想要删除的文件删除掉,可是很可能导致脚本的下部分无法执行。
后来在尝试的时候发现把绝对路径名放到find命令里就不会报错了:
find /绝对路径/ -type d -mtime N -exec rm -rf {} \;
这样一来它找到的文件格式是“/绝对路径/文件夹名”,这样就不会出现“./”了。
本以为世界就能这样的太平下去了,可命运之神总是跟你开着种种的玩笑。
在后来的测试阶段,发现了这个脚本的种种问题,都是由find命令引起的:
首先是时间N的问题,命令“find /绝对路径/ -type d -mtime N”中仅仅使用-mtime N 不是查找N天以前的所有文件,而是查找前第N天的文件,在网上一搜才知道如果是+N代表超过N天,N代表精确的N天,-N代表小于N天。
还有一次我在HP True64上用使用“find /绝对路径/ -type d -mtime N”命令,找到的文件竟然和ls -l列出的文件不等,ls -l找到了五条三天前的纪录,而find命令却只找到了3条纪录,后来听人说ls -l显示的时间是access time,也就是ctime;还有一次,也是用上面的那条命令,找到一个文件夹,竟然我用ls -al也找不到这个文件夹,公司里没一个人能解释,由于当时心急没有抓屏,所以现在也没有log。
然后又是N=1来找麻烦,命令find /绝对路径/ -type d -mtime +N -exec rm -rf {} \;如果“N=1”会把父目录的文件夹也找到,例如:目录结构是这样的/usr/users/ma ,ma文件夹下面有a,b,c三个字文件夹,想只删除a,b,c这几个文件夹,如果用find /usr/users/ma/ -type d -mtime +N -exec rm -rf {} \; 它会找到这些:
/usr/users/ma
/usr/users/ma/a
/usr/users/ma/b
/usr/users/ma/c
所以/usr/users/ma理所当然的也给删除了!
没办法,我又得找回原来的方法cd /绝对路径/目录下/ find ./ -type d -mtime N -exec rm -rf {} \;因为我找到了一条命令可以让报错忽略掉,方法改为:
cd /绝对路径/目录下/
find ./ -type d -mtime +N -exec rm -rf {} \; 2>/dev/null
可是问题到这里还没有结束,如果 N=1 这条命令还会找到这样一个文件夹:
./
/usr/users/ma/a
/usr/users/ma/b
/usr/users/ma/c
如果你的usr/users/ma/ 下面还有你不想删除的文件那么当你删除的"./"目录的时候(也就是你本目录下的所有内容)你的文件可就也保不住了。
在后来的实验中找到了这个:
cd /绝对路径/目录下/
find . -type d -mtime +N -exec rm -rf {} \; 2>/dev/null
这回世界终于算是暂时的太平了,可是谁知道以后会不会又有什么问题呢?
The end