+ -
当前位置:首页 → 问答吧 → 请教如何用perl编写清除squid缓存脚本

请教如何用perl编写清除squid缓存脚本

时间:2010-09-25

来源:互联网

各位大侠帮忙,我的squid缓存的目录是/data/squid/,打算只清除jpg文件的缓存或者只清除js的缓存,
在网上找到张宴用shell实现的脚本,如下:
#!/bin/sh
squidcache_path="/data1/squid/var/cache"
squidclient_path="/usr/local/squid/bin/squidclient"
grep -a -r $1 $squidcache_path/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}' > cache_list.txt
for url in `cat cache_list.txt`; do
$squidclient_path -m PURGE -p 80 $url
done

用法:
  1、清除所有Flash缓存(扩展名.swf):
  ./clear_squid_cache.sh swf

  2、清除URL中包含sina.com.cn的所有缓存:
  ./clear_squid_cache.sh sina.com.cn

  3、清除文件名为zhangyan.jpg的所有缓存:
  ./clear_squid_cache.sh zhangyan.jpg

请问用perl能不能实现相同的功能。

作者: li_000828   发布时间: 2010-09-25

问一下先,清除jpg文件的缓存或者只清除js的缓存
是使用类似
/usr/local/squid/bin/squidclient -m PURGE -p 80 $url
的命令么
其中$url表示一个地址

然后jpg文件是不是指地址里包含.jpg?
那么js呢,它又有什么特征啊?

作者: 珞水的大叔   发布时间: 2010-09-25

回复 li_000828


对,还是用这个命令,   /usr/local/squid/bin/squidclient -m PURGE -p 80 $url
其中$url表示要清除缓存的路径,比如,,
而shell中就是找到缓存中所有包含jpg的$url,然后再用for循环删除squid缓存。

我想用perl来实现,由于shell的grep命令加上参数-r,可以实现递归查找,不知用perl能不能实现/data/squid目录下的所有子目录的递归查找,实现和上面shell脚本一样的功能。

作者: li_000828   发布时间: 2010-09-25

回复 li_000828


    不好意思,路径打错了,
例如: 或者http://2.2.2.2./b.js

作者: li_000828   发布时间: 2010-09-25

回复 li_000828


    最核心的就是用perl能不能实现当前目录及其子目录下的所有文件的查找关键字,由于squid缓存的子目录有100个,要循环打开并用正则匹配的话,效率非常低。

作者: li_000828   发布时间: 2010-09-25

用File::Find找到所有的目录,然后在匹配吧。

作者: shaneqi   发布时间: 2010-09-25