[ Content | Sidebar ]

Posts tagged shell

文件名转小写

rename版

rename -n "s#([A-Z])#\L\$1#g" *
Copy Code 

shell

#!/bin/sh
find `test -n $1 && echo $1 || echo "./"` -type f | while read f;
do
    dname=`dirname "$f"`
    fname=`basename "$f"`
    nname=`echo "$fname"|tr "[:upper:]" "[:lower:]"`
    mv "${dname}/${fname}" "${dname}/${nname}" 2>/dev/null && echo "${dname}/${fname} -> ${dname}/${nname}"
done
Copy Code 

———–
post by gmail~

shell:列出子目录的大小

偶尔看了一下磁盘状况,分给home的一百多G竟然快用光了
/dev/sda8 101G 80G 17G 84% /home

于是找出老早之前写的一句拿出来跑跑,列出所有上M的目录

ls -la|grep ^d|awk '{print $8}'|xargs -i du -sh {}|grep M
Copy Code 

———–
post by gmail~

简单的blog增量备份shell

blog内容越来越多,完全备份已经玩不起了,终于用到了tar的增量备份功能~~
这个简单的备份脚本需要安装mutt(用来发mail) : sudo apt-get install mutt 或者 yum install mutt

#!/bin/sh
#blog根目录
dir="/home/hualu/blog"
#本地备份目录
backdir="/var/backup/bluehua/"
#将备份发送到email
mail="emptyhua+backup@gmail.com"
dbname="数据库名"
dbuser="mysql用户名"
dbpass="mysql密码"
file="${backdir}backup-`date \"+%Y-%m-%d\"`.tar.gz"
sql="./sql_backup_${RANDOM}.sql"
cd "$dir" 
mysqldump --user=${dbuser} --password=${dbpass} ${dbname} > ${sql} 
#增量打包,第一次运行会打包全部,以后都只会打包修改和新增的文件
#由于启用了cache插件,所以将cache目录排除在外
tar -g ${backdir}cookie -zcvf ${file} --exclude=./wp-content/cache* ./
rm -f ${sql} 
#将备份发送到mail
echo "blog备份" | mutt -s "blog备份 `date \"+%Y-%m-%d\"`" -a ${file} ${mail}
Copy Code 

纯sed压缩css文件

额,如果不考虑用java,还是可以考虑考虑这个…

#!/bin/sh
#"^M"用来代替显示win下的换行符,直接复制这段脚本是不能用滴
cat $1 | sed -e 's/^M//g;s/^\xef\xbb\xbf//g;s/\([^0-9]\)0p[xt]/\10/g' -e 's/\/\*.*\*\///g' | sed -e '/^[\t ]*\/\*/,/\*\/[\t ]*$/d' | sed -e '/^[\t ]*$/d' -e 's/^[\t ]*//g' -e 's/;[\t ]*/;/g' -e 's/}[\t ]*/}/g' -e 's/\([^,\{;\}]\)$/\1;/g' -e 's/};/}/g' | sed -e :a -e '/[,;{][\t ]*$/{N;s/\n/ /;ba}' > /tmp/lala_css
mv /tmp/lala_css $1
Copy Code 

压缩规则较简单..

  • 删除注释
  • 删除不必要的空白
  • 删除window的utf BOM标记,删除win下的换行符
  • 每条规则压成一行
  • 0px -> 0

压缩效果如下,比yuicompressor差一点:

 72344 2009-12-01 19:57 layout.css
 69626 2009-12-01 19:52 layout-mini-sed.css
 68720 2009-12-01 19:56 layout-mini-yui.css

文件下载点这里:compress-css.zip

批量替换css里图片的相对路径为绝对路径

最近好像总是发些shell的东西,木办法,最近没怎么写js的样子…
————————————————————–
恩,之所以要替换成绝对路径,是因为css和图片host在不同域的server上,写完刚在站里的静态跑过,好像木啥大问题~
效果:

/img/a.gif 会被替换成 http://domain/img/a.gif
../img/a.gif 会被替换成类似 http://domain/parent/img/a.gif

使用方法如下(linux only)

#直接跟目录就好了
sh r2a.sh /opt/static
Copy Code 

脚本下载点这里:r2a.zip
贴出shell的源码,便于不想下载又想看看shell的同学,还有个python脚本,就不贴了,没啥含量

#!/bin/sh
#@author emptyhua@gmail.com
 
#本地根目录
LROOT="/home/hualu/work/static"
#远程根目录
RROOT="http://myimgdomain.cn"
#要处理目录的绝对路径
CP="`cd $1;pwd`"
#用于转换相对路径为绝对路径的python脚本的路径
PY="/home/hualu/bin/get_sed_rule.py"
LROOTR="`echo ${LROOT} | sed 's/\\//\\\\\//g;s/\\./\\\\\\./g'`"
RROOTR="`echo ${RROOT} | sed 's/\\//\\\\\//g;s/\\./\\\\\\./g'`"
 
echo "执行路径${CP}"
find ${CP} -name "*.css" > /tmp/_r2a_css_files 
 
cat /tmp/_r2a_css_files | while read f;do
    echo "处理:${f}"
    dir="`dirname \"${f}\"`"
#获取css文件所在的发布目录
    echo "${dir}" | sed "s/${LROOTR}/${RROOTR}/" > /tmp/_r2a_remote_path
    remote_path="`cat /tmp/_r2a_remote_path`"
#收集要处理的图片路径
    cat $f | awk '{print NR,"####",$0}' | grep "url([\"\']*\.\{1,2\}" > /tmp/_r2a_file
    cat /tmp/_r2a_file | sed -e "s/url([\"\']*\(\.\.[^\)]*\)[\"\']*)/开始\1始开/g" -e "s/####[^始]*开始/:/;s/始开[^始]*$/:/;s/始开[^始]*开始/:/g" > /tmp/_r2a_cssimage
    echo '' > /tmp/_r2a_sed_rule
#将相对路径转换为绝对路径,并生成sed语句
    cat /tmp/_r2a_cssimage | while read r;do
        rule="`python \"${PY}\" \"${r}\" \"${remote_path}\"`"
        echo "${rule};" >> /tmp/_r2a_sed_rule 
    done
    sed_rule="`cat /tmp/_r2a_sed_rule | tr -d '\\n'`"
#利用sed处理文件
    sed -i -e "$sed_rule" "${f}"
    sed -i -e "s/url(\([\"\']*\)\//url(\1${RROOTR}\//g" "${f}" 
done
 
rm /tmp/_r2a_css_files
rm /tmp/_r2a_remote_path
rm /tmp/_r2a_file
rm /tmp/_r2a_cssimage
rm /tmp/_r2a_sed_rule
Copy Code