[bash]wget -mk -w 10 http://cwgl.xzit.edu.cn/[/bash]
-w 10代表间隔10秒下载一个文件,避免频繁访问网站引起不必要的误会。
可以用-A参数指定UA -k表示替换绝对路径为相对路径
下载回来以后 把所有asp文件(非文件夹,文件夹用-type d)重命名为html,
[bash]find . -name "*.asp" -type f | awk -F ".asp$" '{print $1}' | xargs -i mv {}.asp {}.html[/bash]
或者也可以这样实现
[bash]find ./ -type f -name "*.asp" -exec rename 's/\.asp/\.html/g' {} \;[/bash]
并且对文件里面超链接进行替换
[bash]find . -name "*.html" -exec sed -ie "s/\.asp/\.html/g" {} \;[/bash]
-exec 参数后面跟的是 command命令,注意点如下:
command命令的终止,使用 ';' (分号)来判定,在后面必须有一个 ';'
'{}',使用{}来表示文件名,也就是find前面处理过程中过滤出来的文件,用于command命令进行处理
特别强调,对于不同的系统,直接使用分号可能会有不同的意义, 所以使用转义符 '\'在分号前明确说明
进阶用途
[bash]#删除目录和子目录中的所有空文件
find . -empty -exec rm '{}' \; [/bash]
exec 能接受的长度有些系统会有限制 ,所以xargs 就不可替代了,xargs 接到参数就开始处理 而不是像exec, 非要接受到全部 才开始执行
exec 与 xargs的区别
xargs:通过缓冲方式并以前面命令行的输出作为参数,随后的命令调用该参数
如果不考虑xargs的扩展选项
command1 |xargs command2 可以理解为
command2 command1
因此, find .... | xargs rm 和 rm find ...
等效
但是, 若 find 的结果太多, 可能会超过rm 可能接受的最大参数数量而失败.
xargs优点:由于是批处理的,所以执行效率比较高(通过缓冲方式缓冲所有参数后一次性发送给command2)
xargs缺点:有可能由于参数数量过多(成千上万),导致后面的命令command2执行失败
这个也是exec的“优点”
若换成 find ....-exec rm {} \; 的话,不会出现上面的问题,假设find到了成千上万个文件,那么就会每个文件作为参数发送给一个rm去执行,要发起成千上万个rm才能执行完毕,这样速度虽然慢了,但是能保证不出问题。
xargs的 -0参数可以防止文件名里面有空格导致传递错误的意思和参数
比如
find ./ -type d -name ".svn"|xargs rm -rf
在大部分情况下都可以工作的很好,但是如果路径中有空格,这些空格目录里面的文件就不会被删除
find有一个参数-print0,和默认的-print相比,输出的序列不是以空格分隔,而是以null字符分隔。而xargs也有一个参数-0,可以接受以null而非空格间隔的输入流,这样,上面的方法换成这样更具有通用性
find ./ -type d -name ".svn" -print0 |xargs -0 rm -rf