#
1.windows cygwin 版本
find . -type d|
du |
gawk '{if($1=="0"){print $2}}' | #我这使用 cygwin判断 $1==0 ,如果使用 linux 那就 $1=="4"
sort -ru |
gawk '{system("rmdir "$0)}'
2.linux 版本(其实,这个太不严谨!)
find . -type d|
du -S |
gawk '{if($1=="4"){print $2}}' |
sort -ru |
gawk '{system("rmdir "$0)}'
3.shell + python
查找 文件夹大小py,参考: 获取文件夹大小的python代码
#!/bin/python
import os,sys
from os.path import join, getsize
def getdirsize(dir):
size = 0L;
for root, dirs, files in os.walk(dir):
size += sum([ getdirsize(join(root,dname)) for dname in dirs ]);
size += sum([getsize(join(root, name)) for name in files]);
return size;
dir_path=sys.argv[1];
filesize = getdirsize(dir_path);
print dir_path,"\t",filesize ;
shell
find . -type d -exec python getDirSize.py {} \;|
sort -ru |
gawk '{if($2=="0"){print $1}}' |
gawk '{system(" rmdir "$0)}'
find . -type d #查找文件夹
du #文件夹大小
gawk '{if($1=="0"){print $2}}' #文件夹为 0 输出
sort -ru #为删除准备( 比如 文件夹 ./t1 空 ./t1/t11 空 。排序为 先 ./t1/t11 后 ./t1 。这删除就不会错 )
gawk '{system("rmdir "$0)}' #野蛮的删除
其他:
结合sort -u 可以找出最小或最大 几个文件
#!python
# python this.py /home/xj_liukaiyi/imusic/ ".*128kbps\/.*\.mp3"
import os,sys,re
from os.path import join, getsize
def getdirsize(dir,refile):
for root, dirs, files in os.walk(dir):
for dname in dirs :
getdirsize(join(root,dname),refile)
for name in files :
ffname=join(root,name)
if re.search(refile,ffname):
print "%09d\t%s" % (getsize(ffname),ffname)
dir_path=sys.argv[1];
file_re=sys.argv[2];
filesize = getdirsize(dir_path,file_re);
比如 日志,和shell运行
#!/bin/perl -w
use Time::Local;
my $log_input_file="~/log";
sub set_log_input_file{
$log_input_file=$_[0];
}
#&perl_log("tt","/home/xj_liukaiyi/log");
sub perl_log{
my $log_msg=shift @_;
print $log_msg,"\n";
system 'ttmp1=$(date +%Y-%k-%d);ttmp2=$(date +%M:%S);echo "$ttmp1 $ttmp2:'."$log_msg".'" >>'.$log_input_file;
}
#&system_util("xls -l","~/log");
sub system_util{
my $comm=shift @_;
my @return=system $comm;
if ( $return[(@return-1)] == 0 ) {
&perl_log("[success]".$comm,$log_input_file);
}else{
&perl_log("[error]".$comm,$log_input_file);
}
return $return[(@return-1)];
}
1;
excel 读取util
require("/home/xj_liukaiyi/src/perl/excel/excelUtil.pl");&parse_excel("2w.xls","歌曲列表","&read_wlh);
#!/bin/perl -w
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;
use Encode;
use Unicode::Map();
my $Map = new Unicode::Map("GB2312");
my $excelCODE='gb2312';
my $coslCODE='utf8';
my %parseCache ;
my %writeCache ;
my $oFmtJ = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map =>$excelCODE);
my $oExcel = new Spreadsheet::ParseExcel;
#
#&parse_excel("all4.xls","乐扑","&read_lp);
# sub read_lp{ $_[1 .. 2.3 ] }
sub parse_excel{
my $sExcelName=shift;
my $sSheetName=shift;
my $action_fun=shift;
my($iR, $iC, $oWkS,$oWkC);
#开启 excel
my $oBook = $oExcel->Parse($sExcelName,$oFmtJ);
#根据 sheet 名称匹配
for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++){
my $t_oWkS = $oBook->{Worksheet}[$iSheet];
my $sWkSName=encode($coslCODE,decode($excelCODE,$t_oWkS->{Name} ));
if($sWkSName=~/$sSheetName/){
$oWkS=$t_oWkS;
last;
}
}
for(my $iR = $oWkS->{MinRow} ;
defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ;
$iR++){
my @arr_row;
for(my $iC = $oWkS->{MinCol} ;
defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ;
$iC++){
$oWkC=$oWkS->{Cells}[$iR][$iC];
my $col_value="";
$col_value=encode($coslCODE,decode($excelCODE,$oWkC->Value) ) if ($oWkC) ;
push(@arr_row,$col_value);
}
push(@arr_row,$iR);
$action_fun->(@arr_row);
}
}
#使用 demo
find . -maxdepth 1 -name "*xls" -exec perl -e '
require("/home/xj_liukaiyi/src/perl/excel/excelUtil.pl");
my $file=$ARGV[0];
sub myRead{
my $str="";
foreach$tmp(@_){
$str+"$tmp\t";
}
system "echo $str >> $file.data";
}
&parse_excel("$file",0,\&myRead);
print "$file\n";
' {} \;
/usr/bin/convmv -r -f UTF-8 -t GBK --notest --lowmem .
文件属性查看:
file test.mp3
>>test.mp3: MP3, 128 kBits, 44.1 kHz, JStereo
ffmpeg -i test.mp3
>>Input #0, mp3, from 'test.mp3':
Duration: 00:04:31.26, start: 0.000000, bitrate: 128 kb/s
Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
At least one output file must be specified
lame :linux 其他格式转 mp3 工具 ;
位数 --abr 16/8/4
声道 -m s/m
采样率 --resample 16/44.1..
码率/比特率 -b 128/64
lame --resample 16 --abr 16 -m s -b 128 test.mp3 07_128.mp3
ffmpeg : linux 视频音频处理
*位数
采样率 -ar
声道 -ac 1/2
码率/比特率 -ab 32/218 <acc>
ffmpeg -i test.mp3 -ar 44100 -ac 2 -ab 32 18_32.aac
<wav>
ffmpeg -i test.mp3 -ar 22050 -ac 1 -ab 32 _32.wav
<wma>
ffmpeg -y -i test.mp3 -acodec wmav2 -ar 44100 -ac 2 -ab 32000 24.wma
sox : linux 开源音频转换(只支持开源格式).
<vox_2>
ffmpeg -y -i test.mp3 -acodec pcm_alaw -ar 4000 -ac 1 -ab 32000 22_tmp.wav
sox 22_tmp.wav -r 8000 22.vox
cvs -> root project
到需要挂载到 eclipes的目录下
1.dos>mvn eclipes:eclipes
2.dos>mvn package
3.eclipes> import > General .. > Existing projectint .... > (所需要 子工程)
工具小脚本
#!/bin/perl
use File::Find;
use Log::FileSimple;
#use strict;
#use warnings;
# 说明:
# 遍历出 "/cygdrive/c/Documents and Settings/Administrator/"
# 满足 "^.*\.txt$" 添加文件
# 并运行 "ls -l $fileAllName "
# 运行日志 ./log
#
# perl this.pl
# "ls -l $fileAllName "
# "/cygdrive/c/Documents and Settings/Administrator/"
# "^.*\.txt$"
# ./log
#
# run_comm 参数1 替换说明:
# $filePath 为输入参数2,遍历根目录 "/cygdrive/c/Documents and Settings/Administrator/"
# $fileAllName 为当前遍历,满足正则条件的 全路径+文件名
# $logicFileAllName 为当前遍历,满足正则条件的 逻辑路径+文件名
# $logicFilePath 为当前遍历,逻辑路径
# $logicFileName 文件名称
# $logicFileExp 文件后缀
# (test.txt 文件
# $logicFileName 为 test
# $logicFileExp 为 txt
# )
my $run_comm=$ARGV[0];
my $file_path=$ARGV[1];
my $file_find_rex=$ARGV[2];
my $logfile=$ARGV[3];
my $log = new Log::FileSimple(name=> 'Log::FileSimple logs',
file => "$logfile",
mask => -1,
autoflush => 0,
);
sub fileThumb{
eval{
$_tmp_run_comm=$run_comm ;
if( /$file_find_rex/ ){
$fileNum++;
$_tmp_run_comm=~s/\$filePath/$file_path/g;
my $_file_all_name=$File::Find::name;
$_tmp_run_comm=~s/\$fileAllName/$_file_all_name/g;
my $_logic_file_all_name=$_file_all_name;
$_logic_file_all_name=~s/$file_path//g;
$_logic_file_all_name=~s/^\s*\.//g;
$_tmp_run_comm=~s/\$logicFileAllName/\.\/$_logic_file_all_name/g;
if($_logic_file_all_name=~/^(.*)\/([^\/]*)\.([^\.]*)$/){
my $_logic_file_path=$1;
my $_logic_file_name=$2;
my $_logic_file_exp=$3;
$_tmp_run_comm=~s/\$logicFilePath/\.\/$_logic_file_path/g;
$_tmp_run_comm=~s/\$logicFileName/$_logic_file_name/g;
$_tmp_run_comm=~s/\$logicFileExp/$_logic_file_exp/g;
}
#print $_tmp_run_comm,"\n";
my @return=eval{system("$_tmp_run_comm 2>&1 \|echo \$\? ")};
if ( $return[(@return-1)] != 0 ) {
$log->log(message=>"success($fileNum):$_file_all_name");
}else{
$log->log(message=>"error($fileNum):$_file_all_name");
}
}
}
}
find(\&fileThumb,$file_path);
可能最简单的 soap 哦!
服务器为 java tomcat
下载服务器:http://www.apache.org/dist/ws/
axis/ 为java
axis-c/ 为 c
1.我这下载的 axis 1_4 版本 ,解压 /webapps/axis 放到 tomcat 的webapps
启动tomcat(这就不修改任何,如有需要 该 web.xml 等配置了) 参考 >>
blog 主 还有很多介绍 axis 大家可以 看看 日志 > 其下的 "学习"
直接写个文件 HelloWorld.jws 放到 %TOMCAT_HOME%"webapps"axis
public class HelloWorld {
public String sayHello() {
return "HELLO soap!";
}
}
等不及 可以使用 看看
http://127.0.0.1:8080/axis/HelloWorld.jws?method=sayHello
结果 :
<soapenv:Envelope>
<soapenv:Body>
<sayHelloResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<sayHelloReturn xsi:type="xsd:string">HELLO soap!</sayHelloReturn>
</sayHelloResponse>
</soapenv:Body>
</soapenv:Envelope>
客户段
perl cpan >> install SOAP::Lite
#!perl -w
use SOAP::Lite;
print SOAP::Lite
-> proxy('http://127.0.0.1:8080/axis/HelloWorld.jws')
-> uri('http://127.0.0.1:8080/axis/HelloWorld.jws')
-> sayHello()
-> result;
结果: HELLO soap!
安装参考:
http://www.cnblogs.com/cerxp/archive/2008/04/22/1165620.html
相对 memcached 增强的功能:
1. 坠机后,“缓存”初始化回到断电前
2. 支持同步(可看成集群) Memcachedb 简单使用
代价:
比 memcached 慢 15%
参考:http://swik.net/Jabber-linux/Jabber+XMPP+resource/memcachedb%E7%9A%84%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/b1odq
看看我这张 web 系统架构图,那就知道 使用统一存储格式的好处了。
在这种结构中你就单纯使用 java ,或 php 某一种单一语言描述格式,存储你集群交互的数据吗!?使用ProtocolBuffers 吧, Google 已经有 现成的api来帮你扩展了。
参考:http://blog.csdn.net/lcj8/archive/2009/02/17/3900157.aspx
作为 Memcached 就是为集群使用,那么作为在缓存存储的数据我想也应该适用与各种环境,这时候 数据结构协议 Google ProtocolBuffers
参考:http://code.google.com/apis/protocolbuffers/docs/overview.html
其他语言:http://code.google.com/p/protobuf/wiki/OtherLanguages
(可适用与多种语言,
javascript 读取缓存中的数据 ,你可以想象下你的 web服务开发 的将来!)
目前学习perl 中 就先上个这的代码:
参考:
http://search.cpan.org/~gariev/Google-ProtocolBuffers-0.08/lib/Google/ProtocolBuffers.pm#___top
#!/bin/perl -w
use Cache::Memcached;
use Google::ProtocolBuffers;
#开启 memd
my $memd = new Cache::Memcached{servers => ['10.0.2.15:11211'] };
#声明 缓存 存储 protocol 格式
my $key='test';
Google::ProtocolBuffers->parse("
message Person{
required int32 id =1;
required string name =2;
}
",{create_accessors=>1});
my $data=Person->encode({
id=>123,
name=>'liukaiyi'
});
#缓存存储
$memd->add($key =>$data,3600);
#######################################################################
my $memd = new Cache::Memcached{servers => ['10.0.2.15:11211'] };
my $person;{
#从缓存中取出
$person = Person->decode($memd->get($key));
}
print $person->id,"-",$person->name;
结果:
123-liukaiyi
这大体上可以看出,服务器端口缓存技术。
memcached 官方:http://www.danga.com/memcached/
安装前,先安装 libevent
其上为 linux 软件一般安装,看他们readme文档
$>memcached -d -u nobody -m 512 127.0.0.1 -p 11211
如果有异常,
ln -s /usr/local/lib/libevent-1.4.so.2 /lib/libevent-1.4.so.2
参考 http://blog.chinaunix.net/u2/70049/showart_1665279.html
我这就使用 perl 语言了,
其他语言参考 http://code.google.com/p/memcached/wiki/Clients
perl 使用 cpan> install Cache::Memcached ;#会使用 perl 我就不说了
代码说明:不停对 key 为test 的值进行递增
#!/bin/perl -w
use Cache::Memcached;
my $memd = new Cache::Memcached{servers => ['127.0.0.1:11211'] };
my $key = 'test';
$memd->add($key => 1,3600) or warn 'Alread added';
while(1){
print $memd->get($key),"\n";
$memd->incr($key) or warn 'FAIL!';
}
使用 telnet 127.0.0.1 11211
$> get test
VALUE test 0 2
97 #这就是我们递增的值,当然你使用什么语言取都是一样的
END
|