PHP抓取网页和分析
<?PHP
//$url = "http://news.google.cn/news/section?pz=1&cf=all&ned=ccn&topic=i&ict=ln";
$url = "http://news.google.cn/news/section?pz=1&cf=all&ned=ccn&topic=t&ict=ln";
$lines_array = file($url);
$lines_string = implode('', $lines_array);
eregi('<head>(.*)</head>', $lines_string, $head1);
eregi('<table>(.*)</table>', $lines_string, $head2);
eregi('<div>(.*)</div>', $head2[0], $head3);
echo $head1[0];
echo $head3[0];
?>
译者:limodou
抓取和分析一个文件是非常简单的事。这个教程将通过一个例子带领你一步一步地去实现它。让我们开
始吧!
首先,我首必须决定我们将抓取的URL地址。可以通过在脚本中设定或通过$QUERY_STRING传递。为了简
单起见,让我们将变量直接设在脚本中。
<? $url = 'http://www.php.net'; ?>
第二步,我们抓取指定文件,并且通过file()函数将它存在一个数组里。
<? $url = 'http://www.php.net'; $lines_array = file($url); ?>
好了,现在在数组里已经有了文件了。但是,我们想分析的文本可能不全在一行里面。为了解决这个文
件,我们可以简单地将数组$lines_array转化成一个字符串。我们可以使用implode(x,y)函数来实现它。如
果在后面你想用explode(将字符串变量数组),将x设成"|"或"!"或其它类似的分隔符可能会更好。但是出于
我们的目的,最好将x设成空格。y是另一个必要的参数,因为它是你想用implode()处理的数组。
<? $url = 'http://www.php.net'; $lines_array = file($url); $lines_string = implode('', $lines_array); ?>
现在,抓取工作就做完了,下面该进行分析了。出于这个例子的目的,我们想得到在<head>到</head>
之间的所有东西。为了分析出字符串,我们还需要叫做正规表达式的东西。
<? $url = 'http://www.php.net'; $lines_array = file($url); $lines_string = implode('', $lines_array); eregi("<head>(.*)</head>", $lines_string, $head); ?>
让我们看一下代码。正如你所见,eregi()函数按下面的格式执行:
eregi("<head>(.*)</head>", $lines_string, $head);
"(.*)"表示所有东西,可以解释为,"分析在<head>和</head>间的所以东西"。$lines_string是我们正
在分析的字符串,$head是分析后的结果存放的数组。
最后,我们可以输数据。因为仅在<head>和</head>间存在一个实例,我们可以安全的假设数组中仅存
在着一个元素,而且就是我们想要的。让我们把它打印出来吧。
<? $url = 'http://www.php.net'; $lines_array = file($url); $lines_string = implode('', $lines_array); eregi("<head>(.*)</head>", $lines_string, $head); echo $head[0]; ?>
这就是全部的代码了。
<?php
//获取所有内容url保存到文件
function get_index ( $save_file , $prefix = "index_" ){
$count = 68 ;
$i = 1 ;
if ( file_exists ( $save_file )) @ unlink ( $save_file );
$fp = fopen ( $save_file , "a+" ) or die( "Open " . $save_file . " failed" );
while( $i < $count ){
$url = $prefix . $i . ".htm" ;
echo "Get " . $url . "..." ;
$url_str = get_content_url ( get_url ( $url ));
echo " OK/n" ;
fwrite ( $fp , $url_str );
++ $i ;
}
fclose ( $fp );
}
//获取目标多媒体对象
function get_object ( $url_file , $save_file , $split = "|--:**:--|" ){
if (! file_exists ( $url_file )) die( $url_file . " not exist" );
$file_arr = file ( $url_file );
if (! is_array ( $file_arr ) || empty( $file_arr )) die( $url_file . " not content" );
$url_arr = array_unique ( $file_arr );
if ( file_exists ( $save_file )) @ unlink ( $save_file );
$fp = fopen ( $save_file , "a+" ) or die( "Open save file " . $save_file . " failed" );
foreach( $url_arr as $url ){
if (empty( $url )) continue;
echo "Get " . $url . "..." ;
$html_str = get_url ( $url );
echo $html_str ;
echo $url ;
exit;
$obj_str = get_content_object ( $html_str );
echo " OK/n" ;
fwrite ( $fp , $obj_str );
}
fclose ( $fp );
}
//遍历目录获取文件内容
function get_dir ( $save_file , $dir ){
$dp = opendir ( $dir );
if ( file_exists ( $save_file )) @ unlink ( $save_file );
$fp = fopen ( $save_file , "a+" ) or die( "Open save file " . $save_file . " failed" );
while(( $file = readdir ( $dp )) != false ){
if ( $file != "." && $file != ".." ){
echo "Read file " . $file . "..." ;
$file_content = file_get_contents ( $dir . $file );
$obj_str = get_content_object ( $file_content );
echo " OK/n" ;
fwrite ( $fp , $obj_str );
}
}
fclose ( $fp );
}
//获取指定url内容
function get_url ( $url ){
$reg = '/^http:////[^//].+$/' ;
if (! preg_match ( $reg , $url )) die( $url . " invalid" );
$fp = fopen ( $url , "r" ) or die( "Open url: " . $url . " failed." );
while( $fc = fread ( $fp , 8192 )){
$content .= $fc ;
}
fclose ( $fp );
if (empty( $content )){
die( "Get url: " . $url . " content failed." );
}
return $content ;
}
//使用socket获取指定网页
function get_content_by_socket ( $url , $host ){
$fp = fsockopen ( $host , 80 ) or die( "Open " . $url . " failed" );
$header = "GET /" . $url . " HTTP/1.1/r/n" ;
$header .= "Accept: */*/r/n" ;
$header .= "Accept-Language: zh-cn/r/n" ;
$header .= "Accept-Encoding: gzip, deflate/r/n" ;
$header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)/r/n";
$header .= "Host: " . $host . "/r/n" ;
$header .= "Connection: Keep-Alive/r/n" ;
//$header .= "Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-/r/n/r/n";
$header .= "Connection: Close/r/n/r/n" ;
fwrite ( $fp , $header );
while (! feof ( $fp )) {
$contents .= fgets ( $fp , 8192 );
}
fclose ( $fp );
return $contents ;
}
//获取指定内容里的url
function get_content_url ( $host_url , $file_contents ){
//$reg = '/^(#|JavaScript.*?|ftp:////.+|http:////.+|.*?href.*?|play.*?|index.*?|.*?asp)+$/i';
//$reg = '/^(down.*?/.html|/d+_/d+/.htm.*?)$/i';
$rex = "/([hH][rR][eE][Ff])/s*=/s*['/"]*([^>'/"/s]+)[/"'>]*/s*/i" ;
$reg = '/^(down.*?/.html)$/i' ;
preg_match_all ( $rex , $file_contents , $r );
$result = "" ; //array();
foreach( $r as $c ){
if ( is_array ( $c )){
foreach( $c as $d ){
if ( preg_match ( $reg , $d )){ $result .= $host_url . $d . "/n" ; }
}
}
}
return $result ;
}
//获取指定内容中的多媒体文件
function get_content_object ( $str , $split = "|--:**:--|" ){
$regx = "/href/s*=/s*['/"]*([^>'/"/s]+)[/"'>]*/s*(.*?<//b>)/i" ;
preg_match_all ( $regx , $str , $result );
if ( count ( $result ) == 3 ){
$result [ 2 ] = str_replace ( "多媒体: " , "" , $result [ 2 ]);
$result [ 2 ] = str_replace ( " " , "" , $result [ 2 ]);
$result = $result [ 1 ][ 0 ] . $split . $result [ 2 ][ 0 ] . "/n" ;
}
return $result ;
}
?>
离职员工的期权处理
前一段时间,有不少朋友问到:假如有员工从公司离职,员工手中的期权应当如何处理?近期,越来越多的创业公司也都面临着类似的问题,有的离职员工甚至要把公司告上法庭,看来非常有必要向公司和员工来分享一下关于离职员工的期权问题了。
公司与员工终止劳动关系时,除了终止理由和程序的合法性之外,还涉及到工资、奖金、社保、公积金、经济补偿、保密、知识产权、不竞争义务等等一系列法律问题。如果说这些问题都是惯常的法律问题,那么,随着股权激励在创业公司中越来越广泛的使用,期权已经成为一个越来越普遍的员工离职新问题,因为期权涉及的权益潜在价值较大,再加上缺少成熟的法律规范,公司和员工双方往往都容易被期权问题所困扰。
1、期权是什么?
期权,就是公司赋予员工在满足约定条件后按照特定价格购买公司股权(份)的期待权利,目的在于通过股权来招募、激励和留存优秀人才,这已经成为越来越多创业公司甚至上市公司采用的人才激励方式。这里的特定价格往往比其他投资人购买公司股权(份)的价格要低很多,体现了公司提供给员工的奖励和优惠。
是否行使手中的期权,是员工的权利,而不是义务。员工行使期权,应当按期权文件规定的条件和程序支付行权价格,取得公司股权(份),成为公司股东;员工不行使或放弃期权,则期权到期作废。
简法帮提示:
如果离职员工手中持有公司的期权,员工在离职时就需要权衡公司前景、行权的成本(包括行权价格和税负),是否愿意行使期权从而在离开公司后继续持有公司的股权?而公司方面则需要考虑:是否愿意让离职员工继续持有公司股权?是否有权通过回购等方式收回离职员工手中的期权或股权?能收回多少?需要多大成本?
2、离职员工有多少期权?
创业公司的期权方案中,行使期权的条件通常体现为服务期限。例如,市场主流为约定激励对象四年服务期,每满一年,员工可行使1/4的期权总额;当然,也有不少公司约定为四年服务期,第一年期满可行使1/4的期权总额,剩余3/4期权在三年(36个月)内按月到位,每月到位1/36。当然,也有公司将服务期约定为五年,每年1/5,与四年的道理相同。
这种分期到位(Vesting)的机制是从国外引入,已经成为国内创业公司员工激励的主流方式。但是,这些机制是体现在公司的期权激励文件中,包括激励方案和期权授予协议等文件,而不是在任何法律规章之中,所以公司和员工都需要查阅双方签署的激励文件,以文件的约定为准。
通常情况下,员工必须满一年才能取得相应的期权,员工未满一年离开公司的,按照期权方案规定通常不能行使期权。同样,这也是市场主流实践做法,但是最终都需要以双方签署的激励文件为准。
简法帮提示:
当离职员工涉及期权问题时,公司和员工双方要做的第一件事情,就是找出双方签署的期权授予协议以及相关激励方案等文件。这也是为什么创业者发给我们几个截图想要寻求帮助时,我们通常会给出的建议就是:要全面地查看激励文件。对于公司也是一样。
我们在实践中也注意到,有些创业公司自作聪明,不让员工持有或保存激励方案甚至授予协议。且不论这样的股权激励到底给员工什么样的印象(员工自己都不知道有什么权利义务),股权激励能否达到吸引、激励和留存优秀员工的效果,更重要的是,进入诉讼争议程序后,公司最后还是要提交相关文件,在公开案件中则有可能产生更大范围的负面声誉影响。
3、期权行使的时限
期权行使期限可以说是创业公司股权激励的一个“杀手锏”,基本意思就是,员工在离开公司时或之后的一个30-90天窗口期内必须选择行使期权或者放弃期权,30天和60天都比较常见。未在规定行权窗口期间内行权,期权由公司收回。此外,期权通常都有一个最长10年的行权期限,主要是基于美国税法对激励型期权(见下文第4部分)的限制条件。
现实的情况是,让一个离职的员工(譬如二十几岁的工程师)在离职时或离职后的一两个月内找到行使期权所需要的资金,其实并不容易,尤其是还要考虑行使期权的税负。一方面,收益是纸面财富,这些期权(和行使后拿到的股权)没有市场没有流动性(创业公司的期权计划通常也限制交易),未来能否套现没人知道;但另一方面,公司和税务局却都要现金形式的行权价格和税款。所以,很多创业公司的员工在“另谋高就”时都不得不扔掉了期权这个“鸡肋”。
为了更好吸引人才,硅谷的一些创业公司已经开始采取补救措施。据外媒报道,2015年3月,独角兽Pinterest调整了期权计划,开始允许在公司工作两年以上的员工在离开公司后继续持有已经到位的股票期权,将行权时间窗口拉长了7年时间,这样到时候大部分人都有能力行权了,而且公司也可能已经上市了,行权就能立即套现,支付税费也不再是问题。
简法帮提示:
如果离职员工手中持有公司的期权,员工需要在期权文件规定的行权窗口期内决定是否行使期权,中国法院在判例中也认可了这种行权窗口期的有效性。公司方除了行权价格、手续,还需要考虑期权有关的员工税负和代扣代缴义务,因为在美国法律环境下的期权激励在引入中国后,还有一些水土不服的问题。
从中国境内的法律实践情况来看,创业公司引入更长的时间窗口则面临更多不确定性,不仅税务处理上不够明确(或者说不够优惠,见下文第4部分),而且期权会在公司治理和上市等各个方面带来困扰,所以,创业公司实践中的做法往往是在离职时一揽子解决(收回)期权和其他离职补偿问题(见下文第5部分),因此简法帮在线生成的期权文件中就针对境内架构的公司放弃了这种窗口期的约定,鼓励公司和员工在离职时达成包括期权在内的一揽子整体解决方案。
4、期权的税负
我们引入的期权激励借鉴自美国,美国的股票期权通常包括两种类型:(1)激励型期权(Incentive Stock Option, ISO)。这种期权面向员工,在满足持股期限(期权授予后满两年且行权后满一年)等限制性条件时,员工可以延迟纳税,行权时不缴纳个税(高收入员工存在一个替代性最低税问题,这里不深入讨论),转让股权时的收益按更优惠的资本利得纳税,而不是普通收入纳税,公司也不得扣除期权管理费用;(2)非法定期权(Nonqualified Stock Option, NSO)。这种期权在行权时需要按照差额个人收益(股权取得价与当时的市场价之间的差额)缴纳个人所得税,尽管这时候股票可能还没出售套现,而且作为普通收入计税,但没有法定的持股期限等限制条件,公司则可以扣除期权管理费用。前文提及的硅谷公司调整期权计划,基于上述分类就需要将激励型期权(ISO)转化为非法定期权(NSO),离职员工和公司两个方面分别面临者税负和管理费用扣除的问题。
而在中国现在的法律框架下,包括期权在内的员工股权激励税务制度跟期权的来源地国家——美国差异很大。周鸿祎等创业者曾高调呼吁国家对创新创业要放弃“惯性思维”,尤其是“期权按照个税征税不合理”的呼吁引起了无数创业公司和创业公司员工的共鸣,因为“国家是把期权收入和员工月工资收入加在一起,征收可能高达45%的个人所得税……(忽略了创业企业员工)或许在前五年甚至十年内一直拿着低工资。”
国家也在不断试验和推广改革措施,例如引入分期缴纳的规定:自2016年1月1日起,全国范围内的高新技术企业转化科技成果,给予本企业相关技术人员的股权奖励,个人一次缴纳税款有困难的,可根据实际情况自行制定分期缴税计划,在不超过5个公历年度内(含)分期缴纳,并将有关资料报主管税务机关备案。这里股权奖励是指企业无偿授予相关技术人员一定份额的股权或一定数量的股份。
该规定的局限性在于适用范围过窄,因为该文仅仅适用于高新技术企业转化科技成果给予本企业相关技术人员的股权奖励。且不论高新技术企业的认定要求,仅将该优惠限定在转化科技成果,给予本企业相关技术人员的股权奖励,就已把非技术人员排除在外了。况且规定里的股权奖励是指无偿授予的股权,那么期权算吗?看起来不算。实际上,对于无偿授予股权,这是员工激励里非常忌讳的做法,也面临着无偿授予股权对应的注册资本如何实缴的中国特色法律问题!
简法帮提示:
根据中国现有的税法规定,员工个人获得股权奖励时,按照“工资薪金所得”项目计算确定应纳税额,虽然有可能享受年底奖金类似的处理方式,仍然可能导致员工按累进税率适用最高达45%的个人所得税。但是,按照现有的个人所得税法,如果持有期权的个人不是公司员工,反倒可能根据所得税法适用于更低的20%的个税税率,公司员工作为期权的主要激励对象反而受到更高税率的“惩罚”,这岂不荒唐?!
简法帮基于现有法律框架,之前在36Kr发表过系列文章,在《关于创业公司股权激励的那些“税事儿”(之一)》中谈了创业公司应该了解的基本税收制度,在《关于创业公司股权激励的那些“税事儿”(之二) ——税收规划的秘诀》中进一步聊过有关股权激励制度设计中的税收规划问题,有兴趣的读者可以前往查看。
5、一揽子解决方案
无论是中国还是美国,实施期权而不是限制性股权来激励员工的一个重要作用就是延迟纳税。因为员工取得期权时是否产生所得仍未确定(员工不行权就不产生收入),所以一般在授予期权时不产生纳税义务。比较起来,限制性股权直接授予员工时就可能立即面临纳税义务。在实践中,大部分创业公司通过创始股东低价转让或者公司低价增发的方式,让员工像投资人一样直接或间接取得公司股权,尽管理论上可能构成“工资薪金所得”,但很少听说有创业公司按照股权取得价与当时的市场价之间的差额代扣代缴“工资薪金”个人所得税,公司可以理解为法律不完善,税务局也可能理解为偷税漏税。
鉴于中国目前针对包括期权在内的员工股权激励税务制度尚处在早期阶段,员工行权就会面临繁重的税务负担和现金压力,所以在大部分情况下,在职员工都推迟行使期权,以此观察公司发展状况来决定待(市场)价而入再待(上)市而沽。
但离职员工的期权应该如何处理呢?放弃到位的期权,员工肯定觉得不公平;行权又面临高昂的税负和现金压力。市场实践中常见的做法是在员工离职时通过一揽子协议解决,将员工资、奖金、不竞争补偿金、经济补偿金以及期权等综合考虑,谈判形成一揽子的解决方案,专业的律师还可以利用经济补偿金的税收优惠待遇为公司和个人促成双方都能够接受的合规方案。
简法帮提示:
援引一个官司最终打到最高人民法院的案例来诠释前文内容,信息来源于2013年6月21日最高院《搜房控股有限公司与被申请人孙宝云合同纠纷再审民事裁定书》。
(1)30日行权窗口:“关于孙宝云的股票期权是否失效的问题。《股票期权协议》是双方当事人真实意思表示,内容不违反我国法律、行政法规的强制性规定,合法有效。搜房公司共授予孙宝云55000股的股票期权,孙宝云在期权有效期内享有依据协议选择购买搜房公司上述股票的权利。搜房北京公司与孙宝云于2009年7月1日解除劳动关系,依据《股票期权协议》第二部分总则第3条的约定,孙宝云的股票期权于2009年7月31日失效。但孙宝云早在2009年6月23日就以电子邮件的方式向莫天全提出了行使股票期权即购买股票的要求,并于7月9日和15日分别以电话及快递方式再次提出行使股票期权的要求。而莫天全在签署《股票期权协议》时表明其身份为搜房公司的董事会主席,在本案中亦以搜房公司代表人身份出现,故其有权代表搜房公司作出意思表示。对于孙宝云在股票期权有效期内提出的购买股票请求,依据《股票期权协议》,搜房公司应当向孙宝云出售股票。”
(2)一揽子解决方案——关于《离职协议书》是否终止《股票期权协议》的问题:“《离职协议书》虽然加盖了搜房北京公司的公章和搜房公司人力资源部的印章,但该协议书的内容为搜房北京公司就协商解除劳动合同事宜向孙宝云支付经济补偿金,并未提及孙宝云的股票期权问题,不足以推定搜房公司和孙宝云合意终止股票期权关系……《离职协议书》没有明确变更或终止《股票期权协议》,孙宝云和搜房公司之间的权利义务仍受《股票期权协议》的约束。”
在该案例中,员工孙宝云就注意到了30日行权窗口的问题。但在一揽子解决方案《离职协议书》中,双方没有明确地将股票期权问题涵盖在内,只是笼统地说“双方权利义务终止,除违反本协议的行为外,任何一方不得通过任何途径向对方主张任何权利”,可能是双方故意将期权问题切分出来单独处理,也有可能是双方的误解。但无论怎样,双方错过了员工离职达成一揽子解决方案这个最佳的时机。
最全的jQuery插件列表
jQuery 是继 prototype 之后又一个优秀的 Javascript 框架。其宗旨是—写更少的代码,做更多的事情。它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不jquery及的,它兼容 CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。 jQuery 是一个快速的,简洁的 javaScript 库,使用户能更方便地处理 HTML documents、events、实现动画效果,并且方便地为网站提供 AJAX 交互。 jQuery 还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。 jQuery 能够使用户的 html 页保持代码和 html 内容分离,也就是说,不用再在 html 里面插入一堆js来调用命令了,只需定义 id 即可。今天在Kollermedia.at上发现了一篇JQuery插件列表的文章,特推荐如下。
文件上传(File upload) JQuery_001
Ajax File Upload.
jQUploader.
Multiple File Upload plugin.
jQuery File Style.
Styling an input type file.
Progress Bar Plugin.
表单验证(Form Validation)
jQuery Validation.
Auto Help.
Simple jQuery form validation.
jQuery XAV - form validations.
jQuery AlphaNumeric.
Masked Input.
TypeWatch Plugin.
Text limiter for form fields.
Ajax Username Check with jQuery.
表单-选取框(Form - Select Box stuff)
jQuery Combobox.
jQuery controlled dependent (or Cascadign) Select List.
Multiple Selects.
Select box manipulation.
Select Combo Plugin.
jQuery - LinkedSelect
Auto-populate multiple select boxes.
Choose Plugin (Select Replacement).
表单基本、输入框、选择框等(Form Basics, Input Fields, Checkboxes etc.)
jQuery Form Plugin.
jQuery-Form.
jLook Nice Forms.
jNice.
Ping Plugin.
Toggle Form Text.
ToggleVal.
jQuery Field Plugin.
jQuery Form’n Field plugin.
jQuery Checkbox manipulation.
jTagging.
jQuery labelcheck.
Overlabel.
3 state radio buttons.
ShiftCheckbox jQuery Plugin.
Watermark Input.
jQuery Checkbox (checkboxes with imags).
jQuery SpinButton Control.
jQuery Ajax Form Builder.
jQuery Focus Fields.
jQuery Time Entry.
时间、日期和颜色选取(Time, Date and Color Picker)
jQuery UI Datepicker.
jQuery date picker plugin.
jQuery Time Picker.
Time Picker.
ClickPick.
TimePicker.
Farbtastic jQuery Color Picker Plugin.
Color Picker by intelliance.fr.
投票插件(Rating Plugins)
jQuery Star Rating Plugin.
jQuery Star Rater.
Content rater with asp.net, ajax and jQuery.
Half-Star Rating Plugin.
搜索插件(Search Plugins)
jQuery Suggest.
jQuery Autocomplete.
jQuery Autocomplete Mod.
jQuery Autocomplete by AjaxDaddy.
jQuery Autocomplete Plugin with HTML formatting.
jQuery Autocompleter.
AutoCompleter (Tutorial with PHP&MySQL).
quick Search jQuery Plugin.
编辑器(Inline Edit & Editors)JQuery_002
jTagEditor.
WYMeditor.
jQuery jFrame.
Jeditable - edit in place plugin for jQuery.
jQuery editable.
jQuery Disable Text Select Plugin.
Edit in Place with Ajax using jQuery.
jQuery Plugin - Another In-Place Editor.
TableEditor.
tEditable - in place table editing for jQuery.
多媒体、视频、Flash等(Audio, Video, Flash, SVG, etc)
jMedia - accessible multi-media embedding.
JBEdit - Ajax online Video Editor.
jQuery MP3 Plugin.
jQuery Media Plugin.
jQuery Flash Plugin.
Embed QuickTime.
SVG Integration.
图片(Photos/Images/Galleries)
ThickBox.
jQuery lightBox plugin.
jQuery Image Strip.
jQuery slideViewer.
jQuery jqGalScroll 2.0.
jQuery - jqGalViewII.
jQuery - jqGalViewIII.
jQuery Photo Slider.
jQuery Thumbs - easily create thumbnails.
jQuery jQIR Image Replacement.
jCarousel Lite.
jQPanView.
jCarousel.
Interface Imagebox.
Image Gallery using jQuery, Interface & Reflactions.
simple jQuery Gallery.
jQuery Gallery Module.
EO Gallery.
jQuery ScrollShow.
jQuery Cycle Plugin.
jQuery Flickr.
jQuery Lazy Load Images Plugin.
Zoomi - Zoomable Thumbnails.
jQuery Crop - crop any image on the fly.
Image Reflection.
Google地图(Google Map)
jQuery Plugin googlemaps.
jMaps jQuery Maps Framework.
jQmaps.
jQuery & Google Maps.
jQuery Maps Interface forr Google and Yahoo maps.
jQuery J Maps - by Tane Piper.
游戏(Games)
Tetris with jQuery.
jQuery Chess.
Mad Libs Word Game.
jQuery Puzzle.
jQuery Solar System (not a game but awesome jQuery Stuff).
表格等(Tables, Grids etc.)
UI/Tablesorter.JQuery_003
jQuery ingrid.
jQuery Grid Plugin.
Table Filter - awesome!.
TableEditor.
jQuery Tree Tables.
Expandable “Detail” Table Rows.
Sortable Table ColdFusion Costum Tag with jQuery UI.
jQuery Bubble.
TableSorter.
Scrollable HTML Table.
jQuery column Manager Plugin.
jQuery tableHover Plugin.
jQuery columnHover Plugin.
jQuery Grid.
TableSorter plugin for jQuery.
tEditable - in place table editing for jQuery.
jQuery charToTable Plugin.
jQuery Grid Column Sizing.
jQuery Grid Row Sizing.
统计图(Charts, Presentation etc.)
jQuery Wizard Plugin .
jQuery Chart Plugin.
Bar Chart.
边框、圆角、背景(Border, Corners, Background)
jQuery Corner.
jQuery Curvy Corner.
Nifty jQuery Corner.
Transparent Corners.
jQuery Corner Gallery.
Gradient Plugin.
文字和超链接(Text and Links)
jQuery Spoiler plugin.
Text Highlighting.
Disable Text Select Plugin.
jQuery Newsticker.
Auto line-height Plugin.
Textgrad - a text gradient plugin.
LinkLook - a link thumbnail preview.
pager jQuery Plugin.
shortKeys jQuery Plugin.
jQuery Biggerlink.
jQuery Ajax Link Checker.
鼠标提示(Tooltips)
jQuery Plugin - Tooltip.
jTip - The jQuery Tool Tip.
clueTip.
BetterTip.
Flash Tooltips using jQuery.
ToolTip.
菜单和导航(Menus, Navigations)
jQuery Tabs Plugin - awesome! . [demo nested tabs.]
another jQuery nested Tab Set example (based on jQuery Tabs Plugin).
jQuery idTabs.
jdMenu - Hierarchical Menu Plugin for jQuery.
jQuery SuckerFish Style.
jQuery Plugin Treeview.
treeView Basic.
FastFind Menu.
Sliding Menu.
Lava Lamp jQuery Menu.
jQuery iconDock.
jVariations Control Panel.
ContextMenu plugin.
clickMenu.
CSS Dock Menu.
jQuery Pop-up Menu Tutorial.
Sliding Menu.
http://stilbuero.de/jquery/tabs_3/
幻灯、翻转等(Accordions, Slide and Toggle stuff)
jQuery Plugin Accordion.
jQuery Accordion Plugin Horizontal Way.
haccordion - a simple horizontal accordion plugin for jQuery.
Horizontal Accordion by portalzine.de.
HoverAccordion.
Accordion Example from fmarcia.info.
jQuery Accordion Example.
jQuery Demo - Expandable Sidebar Menu.
Sliding Panels for jQuery.
jQuery ToggleElements.
Coda Slider.
jCarousel.
Accesible News Slider Plugin.
Showing and Hiding code Examples.
jQuery Easing Plugin.
jQuery Portlets.
AutoScroll.
Innerfade.
拖放插件(Drag and Drop)
UI/Draggables.
EasyDrag jQuery Plugin.
jQuery Portlets.
jqDnR - drag, drop resize.
Drag Demos.
XML XSL JSON Feeds
XSLT Plugin.
jQuery Ajax call and result XML parsing.
xmlObjectifier - Converts XML DOM to JSON.
jQuery XSL Transform.
jQuery Taconite - multiple Dom updates.
RSS/ATOM Feed Parser Plugin.
jQuery Google Feed Plugin.
浏览器(Browserstuff)
Wresize - IE Resize event Fix Plugin.
jQuery ifixpng.
jQuery pngFix.
Link Scrubber - removes the dotted line onfocus from links.
jQuery Perciformes - the entire suckerfish familly under one roof.
Background Iframe.
QinIE - for proper display of Q tags in IE.
jQuery Accessibility Plugin.
jQuery MouseWheel Plugin.
对话框、确认窗口(Alert, Prompt, Confirm Windows)
jQuery Impromptu.
jQuery Confirm Plugin.
jqModal.
SimpleModal.
CSS
jQuery Style Switcher.
JSS - Javascript StyleSheets.
jQuery Rule - creation/manipulation of CSS Rules.
jPrintArea.
DOM、AJAX和其它JQuery插件(DOM, Ajax and other jQuery plugins)
FlyDOM.
jQuery Dimenion Plugin.
jQuery Loggin.
Metadata - extract metadata from classes, attributes, elements.
Super-tiny Client-Side Include Javascript jQuery Plugin.
Undo Made Easy with Ajax.
JHeartbeat - periodically poll the server.
Lazy Load Plugin.
Live Query.
jQuery Timers.
jQuery Share it - display social bookmarking icons.
jQuery serverCookieJar.
jQuery autoSave.
jQuery Puffer.
jQuery iFrame Plugin.
Cookie Plugin for jQuery.
jQuery Spy - awesome plugin.
Effect Delay Trick.
jQuick - a quick tag creator for jQuery.
Metaobjects.
elementReady.
英文:http://www.kollermedia.at/archive/2007/11/21/the-ultimate-jquery-plugin-list/
作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
jquery表单元素取值和选中
获取一组radio被选中项的值
var item = $('input[@name=items][@checked]').val();
获取select被选中项的文本
var item = $("select[@name=items] option[@selected]").text();
select下拉框的第二个元素为当前选中值
$('#select_id')[0].selectedIndex = 1;
radio单选组的第二个元素为当前选中值
$('input[@name=items]').get(1).checked = true;
获取值:
文本框,文本区域:$("#txt").attr("value");
多选框checkbox:$("#checkbox_id").attr("value");
单选组radio: $("input[@type=radio][@checked]").val();
下拉框select: $('#sel').val();
控制表单元素:
文本框,文本区域:
$("#txt").attr("value",'');//清空内容
$("#txt").attr("value",'11');//填充内容
多选框checkbox:
$("#chk1").attr("checked",'');//不打勾
$("#chk2").attr("checked",true);//打勾
if($("#chk1").attr('checked')==undefined) //判断是否已经打勾
单选组radio: $("input[@type=radio]").attr("checked",'2');//设置value=2的项目为当前选中项
下拉框select:
$("#sel").attr("value",'-sel3');//设置value=-sel3的项目为当前选中项
$("<option value='1'>1111</option><option value='2'>2222</option>").appendTo("#sel")//添加下拉框的option
$("#sel").empty();//清空下拉框
PHP小偷程序原理、实例及改进
优点:通过PHP小偷,我们可以借用别人网站上的信息而不用自己辛苦地去采集。
缺点:需要把整页的HTML代码读取到本地,然后通过匹配获取到想要的信息再进行显示,这样大大影响网页的加载速度。
改进:通过AJAX异步读取HTML代码,后台进行匹配获取到想要的信息,再显示到前台页面。
预备知识:PHP、AJAX、正则表达式。
关键字:file_get_contents()、fopen()、fwrite()、eregi(),前三个关键字都是关于PHP文件处理的函数,eregi()是关于正则表达式的函数。
一、PHP小偷原理的实现:
1、file_get_contents()、fopen()、fwrite()的应用
咱们用华夏黑客牛刀小试吧,把主页的全部信息获取过来。
建立一个PHP文件:
<?php
$url='http://www.77169.com';
//file_get_contents()函数获取网页的html文档
$file=file_get_contents($url);
//建立一个新文件ImitationIndex.htm
$newfile=fopen('ImitationIndex.htm','w');
//把内容读取进去
fwrite($newfile,$file);
//关闭打开的文件
fclose($newfile);
?>
ImitationIndex.htm获取主页全部的HTML(保存好,以备下次使用)。
2、eregi()函数的应用
通过eregi()获取里的内容:
<?php
$url='http://www.77169.com';
//file_get_contents()函数获取网页的html文档
$file=file_get_contents($url);
//通过eregi()匹配获取想要的信息
eregi('<title>(.*)</title>',$file,$rg);
//建立一个新文件
$newfile=fopen('title.htm','w');
//把内容读取进去
fwrite($newfile,$rg[1]);
?>
打开title.htm可以看到已经获取了<title></title>之间的内容
从上面的两个例子,已经知道PHP小偷的实现原理,从中也知道它的不足之处,但通过AJAX可以完善它,使它可以用于实践项目中。
二、PHP小偷技术的实用和改进:
目的:获取华夏黑客的最新资讯,并实时更新查看示例。
实际中可能只用到三个页面:showNews.php、Update.php、HackNews.htm,但为了能看到实时更新的效果,这里用到了模拟主页的页面ImitationIndex.htm。
showNews.php:
<style type="text/css">
body{background:#c60;}
a{color:#444;font:12px Courier New;padding:8px;}
a:hover{color:#f00}
#hei_content{width:400px;background:#ccc;border:2px solid #000;border-bottom:5px solid #000;}
</style>
<?php
echo('<div id="hei_content">');
include('HackNews.htm');
echo('</div>');
?>
<script type="text/javascript">
window.onload=UpdateNews;
function GetXmlHttp()
{
var xmlhttp;
try
{
//IE7.0 ect
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(a)
{
try
{
//ie6.0 ect
xmlhttp=new ActiveXObject("Mscrosoft.XMLHTTP");
}
catch(b)
{
//非IE
xmlhttp=new XMLHttpRequest();
}
}
return xmlhttp;
}
function StateChange()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.getElementById("hei_content").innerHTML=xmlhttp.responseText;
}
}
function UpdateNews()
{
xmlhttp=GetXmlHttp();
xmlhttp.onreadystatechange=StateChange;
var url='Update.php';
url=url+"?sid="+Math.random();
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
</script>
HackNews.htm是已经缓存的文件,这样不用加载主页上的整个HTML再显示,这个工作留给AJAX:
document.getElementById("hei_content").innerHTML=xmlhttp.responseText
xmlhttp.responseText就是加载更新后的内容。
Update.php:
<?php
$url='ImitationIndex.htm';
//file_get_contents()函数获取网页的html文档
$file=file_get_contents($url);
//$regx为正则表达式的内容,用于匹配获取想要的信息
$regx='<td background=http://hack.77169.com/UploadFiles_8057/200902/20090220100422648.gif colSpan=3 height=100>
(.*)</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colSpan=3><IMG height=8 src=/"http://hack.77169.com/UploadFiles_8057/200902/20090220100422568.gif';
//eregi()获取匹配到的内容,赋值给数组变量$rg;
eregi($regx,$file,$rg);
//建立一个新文件HackNews.htm
$newfile=fopen('HackNews.htm','w');
//把内容读取进去
fwrite($newfile,$rg[1]);
fclose($newfile);
//用iconv编码转换后,输出匹配的HTML内容
$rg[1]=iconv('gb2312','utf-8',$rg[1]);
echo($rg[1]);
?>
Update.php是异步更新的后台页面,“$newfile=fopen('HackNews.htm','w');”和“fwrite($newfile,$rg[1]);”把更新的内容重新保存在HackNews.htm中,下次在index.php中include时就直接调用这个页面,“$url='ImitationIndex.htm'”在实际应用中应该是“$url='http://www.77169.com'”,但为了便于调试,建立一个ImitationIndex.htm模拟页面,如果对ImitationIndex.htm页面中最新资讯中的内容改改,就可以看到实时更新效果。
总结:通过AJAX改进的PHP小偷技术,在采集多个网站的大量信息下,页面的加载速度并不会受多大影响。
dedecms(织梦)采集规则规则宝典
dedecms 采集系统确实很不错,可以免去一些站长手工添加信息的麻烦,设置一下采集规则、采集点,然后点采集,OK,几百篇文章就搞定了!呵呵,确实很省事的!下面介绍几种常用的采集规则的过滤方法:
应用示例一:标题中空格的过滤
经常在采集文章的时候,标题文字里面有空格,采回来后应用很是麻烦,所以需要在过滤处添加下面正则过滤
{dede:trim} {/dede:trim}
应用示例二:来源作者中连接的过滤
小龙 在采集文章的时候,有时会碰到作者混淆时,推荐采集时指定文章作者 ,有的系统里面作者或者来源处都有连接,直接采集的话将连接采集回来了,然后由于这两个字段有限制,通常会造成需要采集的内容没有采集回来,所以需要在过滤处添加下面正则过滤
{dede:trim}<a([^>]*)>([^<]*)</a>{/dede:trim}
应用示例三:文章内容中连接以及其他广告代码的过滤
这个就不用说了,当需要对所有东西过滤的时候,直接用上面所有的代码过滤就可以,但是实际应用中,我们只需要对连接、动画、调用等进行过滤。(这个需要按照对方内容里面具体含有什么代码来具体操作)
一般的只有链接,使用二中的代码进行过滤就可以了,但是实际上一般的网站现在都在内容里面加有广告等,所以采取下面的过滤正则就可以完成过滤:
{dede:trim}<a([^>]*)>([^<]*)</a>{/dede:trim}
{dede:trim}<IFRAME([^>]*)>([^>]*)</IFRAME>{/dede:trim}
{dede:trim}<object([^>]*)>([^>]*)</object>{/dede:trim}
{dede:trim}<script([^>]*)>([^>]*)</script>{/dede:trim}
应用示例四:过滤GG广告代码
其实这个就是在上面的内容过滤,但是很多论坛里的网友经常问这个,所以单独作为一个应用列出来:
{dede:trim}<script([^>]*)>([^>]*)</script>{/dede:trim}
下面是在综合论坛上网友的各种正则的一个全集:
{dede:trim}
{/dede:trim}
{dede:trim}<param([^>]*)>{/dede:trim}
{dede:trim}<embed([^>]*)>([^>]*)</embed>{/dede:trim}
{dede:trim}<embed([^>]*)>{/dede:trim}
{dede:trim}</embed>{/dede:trim}
{dede:trim}<object([^>]*)>([^>]*)</object>{/dede:trim}
{dede:trim}<object([^>]*)>{/dede:trim}
{dede:trim}</object>{/dede:trim}
{dede:trim}<OBJECT([^>]*)>([^>]*)</OBJECT>{/dede:trim}
{dede:trim}<OBJECT([^>]*)>{/dede:trim}
{dede:trim}</OBJECT>{/dede:trim}
{dede:trim}<iframe([^>]*)>([^>]*)</iframe>{/dede:trim}
{dede:trim}<iframe([^>]*)>{/dede:trim}
{dede:trim}</iframe>{/dede:trim}
{dede:trim}<IFRAME([^>]*)>([^>]*)</IFRAME>{/dede:trim}
{dede:trim}<IFRAME([^>]*)>{/dede:trim}
{dede:trim}</IFRAME>{/dede:trim}
{dede:trim}<font([^>]*)>([^<]*)</font>{/dede:trim}
{dede:trim}<font([^>]*)>{/dede:trim}
{dede:trim}</font>{/dede:trim}
{dede:trim}<a([^>]*)>([^<]*)</a>{/dede:trim}
{dede:trim}<a([^>]*)>{/dede:trim}
{dede:trim}</a>{/dede:trim}
{dede:trim}<td([^>]*)>([^>]*)</td>{/dede:trim}
{dede:trim}<td([^>]*)>{/dede:trim}
{dede:trim}</td>{/dede:trim}
{dede:trim}<tr([^>]*)>([^>]*)</tr>{/dede:trim}
{dede:trim}<tr([^>]*)>{/dede:trim}
{dede:trim}</tr>{/dede:trim}
{dede:trim}<tbody([^>]*)>([^>]*)</tbody>{/dede:trim}
{dede:trim}<tbody>{/dede:trim}
{dede:trim}</tbody>{/dede:trim}
{dede:trim}<table([^>]*)>([^>]*)</table>{/dede:trim}
{dede:trim}<table([^>]*)>{/dede:trim}
{dede:trim}</table>{/dede:trim}
{dede:trim}<img([^>]*)>{/dede:trim}
{dede:trim}<span([^>]*)>{/dede:trim}
{dede:trim}</span>{/dede:trim}
{dede:trim} {/dede:trim}
{dede:trim}<stong>{/dede:trim}
{dede:trim}</stong>{/dede:trim}
好了,上面四种应用基本上涵盖了采集的各种应用,掌握了这个,过滤基本上就不用求人了!
js 验证表单提交验证类
附加:js验证radio是否选择
<script language="JavaScript">
function checkform(obj)
{
for(i=0;i<obj.oo.length;i++)
if(obj.oo[i].checked==true) return true;
alert("请选择")
return false;
}
</script>
<form id="form1" name="form1" method="post" action="" onsubmit="return checkform(this)">
<input type="radio" name="oo" value="radiobutton" />
<input type="radio" name="oo" value="radiobutton" />
<input type="submit" name="Submit" value="提交 " />
</form>
1. 长度限制
<script>
function test()
{
if(document.a.b.value.length>50)
{
alert("不能超过50个字符!");
document.a.b.focus();
return false;
}
}
</script>
<form name=a onsubmit="return test()">
<textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea>
<input type="submit" name="Submit" value="check">
</form>
2. 只能是汉字
<input onkeyup="value="/oblog/value.replace(/[^/u4E00-/u9FA5]/g,'')">
3." 只能是英文
<script language=javascript>
function onlyEng()
{
if(!(event.keyCode>=65&&event.keyCode<=90))
event.returnvalue=false;
}
</script>
<input onkeydown="onlyEng();">
4. 只能是数字
<script language=javascript>
function onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
//考虑小键盘上的数字键
event.returnvalue=false;
}
</script>
<input onkeydown="onlyNum();">
5. 只能是英文字符和数字
<input onkeyup="value="/oblog/value.replace(/[/W]/g,"'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))">
6. 验证 油箱格式
<SCRIPT LANGUAGE=javascript RUNAT=Server>
function isEmail(strEmail) {
if (strEmail.search(/^/w+((-/w+)|(/./w+))*/@[A-Za-z0-9]+((/.|-)[A-Za-z0-9]+)*/.[A-Za-z0-9]+$/) != -1)
return true;
else
alert("oh");
}
</SCRIPT>
<input type=text onblur=isEmail(this.value)>
7. 屏蔽关键字(这里屏蔽***和****)
<script language="javascript1.2">
function test() {
if((a.b.value.indexOf ("***") == 0)||(a.b.value.indexOf ("****") == 0)){
alert(" ");
a.b.focus();
return false;}
}
</script>
<form name=a onsubmit="return test()">
<input type=text name=b>
<input type="submit" name="Submit" value="check">
</form>
8. 两次输入密码是否相同
<FORM METHOD=POST ACTION="">
<input type="password" id="input1">
<input type="password" id="input2">
<input type="button" value="test" onclick="check()">
</FORM>
<script>
function check()
{
with(document.all){
if(input1.value!=input2.value)
{
alert("false")
input1.value = "";
input2.value = "";
}
else document.forms[0].submit();
}
}
</script>
够了吧
屏蔽右键 很酷
oncontextmenu="return false" ondragstart="return false" onselectstart="return false"
加在body中
二
2.1 表单项不能为空
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.name.value.length == 0) {
alert("请输入您姓名!");
document.form.name.focus();
return false;
}
return true;
}
-->
</script>
2.2 比较两个表单项的值是否相同
<script language="javascript">
<!--
function CheckForm()
if (document.form.PWD.value != document.form.PWD_Again.value) {
alert("您两次输入的密码不一样!请重新输入.");
document.ADDUser.PWD.focus();
return false;
}
return true;
}
-->
</script>
2.3 表单项只能为数字和"_",用于电话/银行帐号验证上,可扩展到域名注册等
<script language="javascript">
<!--
function isNumber(String)
{
var Letters = "1234567890-"; //可以自己增加可输入值
var i;
var c;
if(String.charAt( 0 )=='-')
return false;
if( String.charAt( String.length - 1 ) == '-' )
return false;
for( i = 0; i < String.length; i ++ )
{
c = String.charAt( i );
if (Letters.indexOf( c ) < 0)
return false;
}
return true;
}
function CheckForm()
{
if(! isNumber(document.form.TEL.value)) {
alert("您的电话号码不合法!");
document.form.TEL.focus();
return false;
}
return true;
}
-->
</script>
2.4 表单项输入数值/长度限定
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.count.value > 100 || document.form.count.value < 1)
{
alert("输入数值不能小于零大于100!");
document.form.count.focus();
return false;
}
if (document.form.MESSAGE.value.length<10)
{
alert("输入文字小于10!");
document.form.MESSAGE.focus();
return false;
}
return true;
}
//-->
</script>
2.5 中文/英文/数字/邮件地址合法性判断
<SCRIPT LANGUAGE="javascript">
<!--
function isEnglish(name) //英文值检测
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return false;
}
return true;
}
function isChinese(name) //中文值检测
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return true;
}
return false;
}
function isMail(name) // E-mail值检测
{
if(! isEnglish(name))
return false;
i = name.indexOf(" at ");
j = name dot lastIndexOf(" at ");
if(i == -1)
return false;
if(i != j)
return false;
if(i == name dot length)
return false;
return true;
}
function isNumber(name) //数值检测
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charAt(i) < "0" || name.charAt(i) > "9")
return false;
}
return true;
}
function CheckForm()
{
if(! isMail(form.Email.value)) {
alert("您的电子邮件不合法!");
form.Email.focus();
return false;
}
if(! isEnglish(form.name.value)) {
alert("英文名不合法!");
form.name.focus();
return false;
}
if(! isChinese(form.cnname.value)) {
alert("中文名不合法!");
form.cnname.focus();
return false;
}
if(! isNumber(form.PublicZipCode.value)) {
alert("邮政编码不合法!");
form.PublicZipCode.focus();
return false;
}
return true;
}
//-->
</SCRIPT>
2.6 限定表单项不能输入的字符
<script language="javascript">
<!--
function contain(str,charset)// 字符串包含测试函数
{
var i;
for(i=0;i<charset.length;i++)
if(str.indexOf(charset.charAt(i))>=0)
return true;
return false;
}
function CheckForm()
{
if ((contain(document.form.NAME.value, "%/(/)><")) || (contain(document.form.MESSAGE.value, "%/(/)><")))
{
alert("输入了非法字符");
document.form.NAME.focus();
return false;
}
return true;
}
//-->
</script>
Linux文件查找命令find,xargs详述
前言:关于find命令
一、find 命令格式
1、find命令的一般形式为;
2、find命令的参数;
3、find命令选项;
4、使用exec或ok来执行shell命令;
1、查找当前用户主目录下的所有文件;
2、为了在当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件;
3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;
4、查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们;
5、为了查找系统中所有属于root组的文件;
6、find命令将删除当目录中访问时间在7日以来、含有数字后缀的admin.log文件
7、为了查找当前文件系统中的所有目录并排序;
8、为了查找系统中所有的rmt磁带设备;
1、使用name选项
2、用perm选项
3、忽略某个目录
4、使用find查找文件的时候怎么避开某个文件目录
5、使用user和nouser选项
6、使用group和nogroup选项
7、按照更改时间或访问时间等查找文件
8、查找比某个文件新或旧的文件
9、使用type选项
10、使用size选项
11、使用depth选项
12、使用mount选项
+++++++++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++++++++
版权声明
本文是zhyfly兄贴在LinuxSir.Org 的一个帖子而整理出来的,如果您对版权有疑问,请在本帖后面跟帖。谢谢;本文的HTML版本由北南南北整理;修改了整篇文档的全角及说明文字中的单词中每个字母空格的问题;为标题加了编号,方便大家阅读;
前言:关于find命令
由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
一、find 命令格式
1、find命令的一般形式为;
find pathname -options [-print -exec -ok ...]
2、find命令的参数;
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } /;,注意{ }和/;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
3、find命令选项
-name
按照文件名查找文件。
-perm
按照文件权限来查找文件。
-prune
使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user
按照文件属主来查找文件。
-group
按照文件所属的组来查找文件。
-mtime -n +n
按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
-nogroup
查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser
查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2
查找更改时间比文件file1新但比文件file2旧的文件。
-type
查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
另外,下面三个的区别:
-amin n
查找系统中最后N分钟访问的文件
-atime n
查找系统中最后n*24小时访问的文件
-cmin n
查找系统中最后N分钟被改变文件状态的文件
-ctime n
查找系统中最后n*24小时被改变文件状态的文件
-mmin n
查找系统中最后N分钟被改变文件数据的文件
-mtime n
查找系统中最后n*24小时被改变文件数据的文件
4、使用exec或ok来执行shell命令
使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的
在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个/,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。
例如:为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中
# find . -type f -exec ls -l { } /;
-rw-r--r-- 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r--r-- 1 root root 12959 2003-02-25 ./conf/magic
-rw-r--r-- 1 root root 180 2003-02-25 ./conf.d/README
上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出。
在/logs目录中查找更改时间在5日以前的文件并删除它们:
$ find logs -type f -mtime +5 -exec rm { } /;
记住: 在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。
在下面的例子中, find命令在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。
$ find . -name "*.conf" -mtime +5 -ok rm { } /;
< rm ... ./conf/httpd.conf > ? n
按y键删除文件,按n键不删除。
任何形式的命令都可以在-exec选项中使用。
在下面的例子中我们使用grep命令。find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个sam用户。
# find /etc -name "passwd*" -exec grep "sam" { } /;
sam:x:501:501::/usr/sam:/bin/bash
二、find命令的例子;
1、查找当前用户主目录下的所有文件:
下面两种方法都可以使用
$ find $HOME -print
$ find ~ -print
2、让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件;
$ find . -type f -perm 644 -exec ls -l { } /;
3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;
$ find / -type f -size 0 -exec ls -l { } /;
4、查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们;
$ find /var/logs -type f -mtime +7 -ok rm { } /;
5、为了查找系统中所有属于root组的文件;
$find . -group root -exec ls -l { } /;
-rw-r--r-- 1 root root 595 10月 31 01:09 ./fie1
6、find命令将删除当目录中访问时间在7日以来、含有数字后缀的admin.log文件。
该命令只检查三位数字,所以相应文件的后缀不要超过999。先建几个admin.log*的文件 ,才能使用下面这个命令
$ find . -name "admin.log[0-9][0-9][0-9]" -atime -7 -ok
rm { } /;
< rm ... ./admin.log001 > ? n
< rm ... ./admin.log002 > ? n
< rm ... ./admin.log042 > ? n
< rm ... ./admin.log942 > ? n
7、为了查找当前文件系统中的所有目录并排序;
$ find . -type d | sort
8、为了查找系统中所有的rmt磁带设备;
$ find /dev/rmt -print
三、xargs
xargs - build and execute command lines from standard input
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
下面的例子查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
#find . -type f -print | xargs file
./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text
./.kde/Autostart/.directory: ISO-8859 text/
......
在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
$ find / -name "core" -print | xargs echo "" >/tmp/core.log
上面这个执行太慢,我改成在当前目录下查找
#find . -name "file*" -print | xargs echo "" > /temp/core.log
# cat /temp/core.log
./file6
在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:
# ls -l
drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf
# find . -perm -7 -print | xargs chmod o-w
# ls -l
drwxrwxr-x 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
用grep命令在所有的普通文件中搜索hostname这个词:
# find . -type f -print | xargs grep "hostname"
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
用grep命令在当前目录下的所有普通文件中搜索hostnames这个词:
# find . -name /* -type f -print | xargs grep "hostnames"
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
注意,在上面的例子中, /用来取消find命令中的*在shell中的特殊含义。
find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
四、find 命令的参数
下面是find一些常用参数的例子,有用到的时候查查就行了,像上面前几个贴子,都用到了其中的的一些参数,也可以用man或查看论坛里其它贴子有find的命令手册
1、使用name选项
文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。
可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。
不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.txt的文件,使用~作为 'pathname'参数,波浪号~代表了你的$HOME目录。
$ find ~ -name "*.txt" -print
想要在当前目录及子目录中查找所有的‘ *.txt’文件,可以用:
$ find . -name "*.txt" -print
想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:
$ find . -name "[A-Z]*" -print
想要在/etc目录中查找文件名以host开头的文件,可以用:
$ find /etc -name "host*" -print
想要查找$HOME目录中的文件,可以用:
$ find ~ -name "*" -print 或find . -print
要想让系统高负荷运行,就从根目录开始查找所有的文件。
$ find / -name "*" -print
如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是.txt的文件,下面的命令就能够返回名为ax37.txt的文件:
$find . -name "[a-z][a-z][0--9][0--9].txt" -print
2、用perm选项
按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。
如在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用:
$ find . -perm 755 -print
还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-006相当于666
# ls -l
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam
-rw-rw-rw- 1 root root 2792 10月 31 20:19 temp
# find . -perm 006
# find . -perm -006
./sam
./httpd1.conf
./temp
-perm mode:文件许可正好符合mode
-perm +mode:文件许可部分符合mode
-perm -mode: 文件许可完全符合mode
3、忽略某个目录
如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。
如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用:
$ find /apps -path "/apps/bin" -prune -o -print
4、使用find查找文件的时候怎么避开某个文件目录
比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件
find /usr/sam -path "/usr/sam/dir1" -prune -o -print
find [-path ..] [expression] 在路径列表的后面的是表达式
-path "/usr/sam" -prune -o -print 是 -path "/usr/sam" -a -prune -o
-print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 -path "/usr/sam" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path "/usr/sam" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。
这个表达式组合特例可以用伪码写为
if -path "/usr/sam" then
-prune
else
-print
避开多个文件夹
find /usr/sam /( -path /usr/sam/dir1 -o -path /usr/sam/file1 /) -prune -o -print
圆括号表示表达式的结合。
/ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。
查找某一确定文件,-name等选项加在-o 之后
#find /usr/sam /(-path /usr/sam/dir1 -o -path /usr/sam/file1 /) -prune -o -name "temp" -print
5、使用user和nouser选项
按文件属主查找文件,如在$HOME目录中查找文件属主为sam的文件,可以用:
$ find ~ -user sam -print
在/etc目录下查找文件属主为uucp的文件:
$ find /etc -user uucp -print
为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名; find命令能够为你完成相应的工作。
例如,希望在/home目录下查找所有的这类文件,可以用:
$ find /home -nouser -print
6、使用group和nogroup选项
就像user和nouser选项一样,针对文件所属于的用户组, find命令也具有同样的选项,为了在/apps目录下查找属于gem用户组的文件,可以用:
$ find /apps -group gem -print
要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件
$ find / -nogroup-print
7、按照更改时间或访问时间等查找文件
如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。
用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。
希望在系统根目录下查找更改时间在5日以内的文件,可以用:
$ find / -mtime -5 -print
为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:
$ find /var/adm -mtime +3 -print
8、查找比某个文件新或旧的文件
如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。它的一般形式为:
newest_file_name ! oldest_file_name
其中,!是逻辑非符号。
查找更改时间比文件sam新但比文件temp旧的文件:
例:有两个文件
-rw-r--r-- 1 sam adm 0 10月 31 01:07 fiel
-rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam
-rw-rw-rw- 1 root root 2792 10月 31 20:19 temp
# find -newer httpd1.conf ! -newer temp -ls
1077669 0 -rwxrwxr-x 2 sam adm 0 10月 31 01:01 ./httpd.conf
1077671 4 -rw-rw-rw- 1 root root 2792 10月 31 20:19 ./temp
1077673 0 -rw-r--r-- 1 sam adm 0 10月 31 01:07 ./fiel
查找更改时间在比temp文件新的文件:
$ find . -newer temp -print
9、使用type选项
在/etc目录下查找所有的目录,可以用:
$ find /etc -type d -print
在当前目录下查找除目录以外的所有类型的文件,可以用:
$ find . ! -type d -print
在/etc目录下查找所有的符号链接文件,可以用
$ find /etc -type l -print
10、使用size选项
可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。
在按照文件长度查找文件时,一般使用这种以字节表示的文件长度,在查看文件系统的大小,因为这时使用块来计量更容易转换。
在当前目录下查找文件长度大于1 M字节的文件:
$ find . -size +1000000c -print
在/home/apache目录下查找文件长度恰好为100字节的文件:
$ find /home/apache -size 100c -print
在当前目录下查找长度超过10块的文件(一块等于512字节):
$ find . -size +10 -print
11、使用depth选项
在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。
在下面的例子中, find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。
它将首先匹配所有的文件然后再进入子目录中查找。
$ find / -name "CON.FILE" -depth -print
12、使用mount选项
在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。
从当前目录开始查找位于本文件系统中文件名以XC结尾的文件:
$ find . -name "*.XC" -mount -print
Mysql数据库分组
截取字段 进行数据库分组
SELECT `ts_time`,count(`ts_time`) FROM `inform_analysis` where `ts_time`>='2010-01-01' and `ts_time`<='2010-02-23' group by substring(`ts_time`,1,10)
比如查找当前目录下面所有的PHP文件里面的内容
find ./ -name "*.php" | xargs grep '要查找的内容'
如果需要查找的内容包含特殊符号,比如$等等,grep要加参数
find ./ -name "*.php" | xargs grep -F '要查找的内容'
电子邮件的艺术
产品经理没有 行政意义上的权利和上下级隶属关系,要推动产品的发展,很大程度上靠协调能力和情商,鼓舞兄弟们认可一个共同的愿景,为产品成功而群策群力。电子邮件是现 代企业,特别是互联网企业、外企最常用的沟通手段。电子邮件在外企职场,真的可以说是“运用之妙,存乎一心”,语气、措辞、发送、抄送,无数微妙之处都是 考验一个产品经理是否称职,合格的产品经理应该懂得如何把最基本的沟通工具应用到极致和得心应手。
人与人之间的沟通方式包含了面对面,电话,电子邮件和即时消息,便条和信件,正式 的报告和公告。上述几种方式能够起到的作用决定于下面三个特征:第一,确保双方信息交换同步进行;第二,确保信息的反馈快速双向;第三,确保沟通中根据对 方实际情况进行信息传递。
越来越多的人无论在工作中还是在生活中都采用了电子邮件的方式从而取代了原先的书 信往来。然而电子邮件所具有的快速和简便的自然属性同时也潜在地带来许多容易犯下的错误。从上面列举的三大特征中,我们可以看到电子邮件的沟通方式可能带 来的弊端。而这些弊端引起的错误也许是无意的,但可能造成的损失却是巨大的,轻易地点击发送按钮有可能毁灭的是你的职业生涯。下面就谈谈电子邮件往来中什 么是该做的,什么是不该做的。
该做的:
1.邮件主题一栏应该是整个邮件内容的概括。而太多的人在这一栏内往往空缺,也为 以后的索引带来不便。
2.电子邮件内容应该简短,达意,建议用点句的形式,避免长篇大论。
3.邮件的开头应该用称呼语,同时在结尾要用适当的敬语。经常阅读到其他部门转发 的邮件,从前面看起,发现高一级的经理给下属的邮件常常缺失称呼和敬语,但给更高一级的上级时却都没有遗漏,这种行为是为人所不齿的。有时候也收到其他部 门员工发来的邮件要求就某事配合,只有表达内容的几句话,连个称呼和谢谢都没有,这种邮件极其没有礼貌,估计这样的员工如果提升为经理后就会出现只对上级 尊重而对下属特拽的德性了。电子邮件其实是书信的一种替换,其作用,格式即使再怎么变,但人与人之间的尊重还是不能改变的。切记你的行为应该礼貌,尊重对 方。
4.如果你的事情很紧急,应该在邮件中给出答复的时间底线,但要注意语气,没有人 喜欢被命令,每个人都有自尊,尤其对于同级别的同事。
5.一定注意你写邮件时的心情,保持平和的心态,尤其是工作邮件,尤其是跨部门合 作的邮件。
6.看到攻击你的邮件,最好的方式是拿起电话,或者面对面的进行沟通。这是你为人 的宽容和豁达。
7.合理使用抄送,尤其是密件抄送。你是需要解决问题,但何必一定要抄送他或者你 的上级呢?是否有种威胁的味道?
8.对于中国员工写英文邮件,避免使用生僻单词,有些词汇字典中的解释与中文一 样,但原意却大相径庭。由于中文和英文的构造不同,中文是可以猜的,而英文你没看到过,就是不知道其中的含义,尤其对于老外,其学历很大程度上决定了其单 词量的识别程度。
9.新员工入司后,尤其对于国际性公司,可能会与国外有沟通,请先让你的上司先写 个邮件通知国外的联系者,然后你再联系。或者在你发邮件之前给你的上司过目一下。
10.打开语法和拼写检查的功能,语法错误容易让对方产生歧义,错别字的出现表明 了你的态度认真与否。
11.电子邮件可以用来组织会议,概括会议内容,总结讨论的结果,然后给所有与会 人员。
12.使用“离开办公室”的功能,让对方知道你的状态,比如出差,以便对方采用另 外的沟通方式,避免引起误会。
13.尽量在同一天(不要隔夜)回复对方的邮件,以免对方苦苦等待,或者猜测。
14.在你点击发送邮件前请仔细,反复阅读你邮件的内容。
不该做的:
1.用电子邮件嘲笑你的上司或者责问你的同事。
2.对邮件的内容过于随意。除非你想让你邮件的内容在当天见诸报端或者电视,广 播。
3.利用邮件展开一场战争或者让战争持续。在邮件中要避免传达个人的愤怒和感情, 不要意图通过邮件一定要制对方于死地。一些重要的,复杂的,难以沟通的,牵涉个人的信息最好通过面对面的沟通或者电话。邮件战争在公司中司空见惯,满腔怒 火,挖空心思,甚至用一天的时间就为了一个邮件是愚蠢的。记住,邮件一定要避免泼妇骂街,即使你认为自己很客观,但字里行间一定会透露出一种心情的,你的 上司也是从坎坷中走过来的,他看你的邮件就如老师看小学生作弊一样的一目了然。最终的结果一般是各打五十大板。
4.将邮件发给全世界的人。这会将战争升级,矛盾公开化,这对你的职业前景极为不 利,没有一个经理会愿意面对这样的下属的。
5.用一些不敬的语言。这会让彼此之间甚至周围的人都很难堪,同时也会对你所要表 达的观点产生太多的误解。
当然,在我们日常的工作中经常也碰到如下两种的情况:
一种情况:你的上级从来不以邮件的方式告知他的决定,而代之以口头的方式,原因一 般两种,一种是对其决定的事情没有自信,另一种是要你做的事情违反公司规定,道德行为或者法律。以免落下书面证据。
另一种情况:老外给你的邮件一般都是要求你当夜回复,如果没有回复,那么就是接二 连三,甚至抄送你的上级,他的上级。而你一旦有急事找他,那么你一般会等到花儿也谢了。原因一般两种:一种是他在度假,尤其是欧洲人,另一种是每个老外都 把自己当成你的上司。嗬嗬,浅见薄识,见笑了。