<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>水草树 &#187; Shell</title>
	<atom:link href="http://mifunny.info/category/study/bash-shell/feed" rel="self" type="application/rss+xml" />
	<link>http://mifunny.info</link>
	<description>走走停停看看，恍然大悟。</description>
	<lastBuildDate>Sat, 27 Aug 2011 18:25:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>MySQL转SQLite Shell脚本</title>
		<link>http://mifunny.info/convert-mysql-to-sqlite-script-330.html</link>
		<comments>http://mifunny.info/convert-mysql-to-sqlite-script-330.html#comments</comments>
		<pubDate>Mon, 01 Mar 2010 15:28:22 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PDO]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://mifunny.info/?p=330</guid>
		<description><![CDATA[杭城焰火满天飞, 闲来无事, 给 WordPress 换上SQLite; SQLite 在单服务器10W并发以下是很有优势的, 据说可以达到mysql与postgresql的2~20倍(道听途说, 没验证)。 使用WP插件pdo for wordpress, 本来使用XML导入导出数据, 奈何文件太大, 超过php的内存限制,找了个MySQL转SQLite的教本, 很好用, 分享。 文件: mysql2sqlite.sh &#160;1 #!/bin/bash &#160;2 # MySQL 2 SQLite &#160;3 if [&#160;&#34;x$1&#34;&#160;==&#160;&#34;x&#34;&#160;];&#160;then &#160;4 &#160;&#160;&#160;&#160;echo&#160;&#34;Usage: $0&#160;&#60;dumpname&#62;&#34; &#160;5 &#160;&#160;&#160;&#160;exit &#160;6 fi &#160;7 &#160;8 cat $1&#160;&#124; &#160;9 grep&#160;-v&#160;&#8216;&#160;KEY &#34;&#8216;&#160;&#124; 10 grep&#160;-v&#160;&#8216;&#160;UNIQUE KEY &#34;&#8216;&#160;&#124; 11 grep&#160;-v&#160;&#8216;&#160;PRIMARY KEY &#8216;&#160;&#124; 12 sed&#160;&#8216;/^SET/d&#8216;&#160;&#124; 13 sed&#160;&#8216;s/ [...]]]></description>
			<content:encoded><![CDATA[<p>杭城焰火满天飞, 闲来无事, 给 WordPress 换上SQLite; SQLite 在单服务器10W并发以下是很有优势的, 据说可以达到mysql与postgresql的2~20倍(道听途说, 没验证)。 使用WP插件<a href="http://wordpress.org/extend/plugins/pdo-for-wordpress/" title="PDO (SQLite) For WordPress">pdo for wordpress</a>, 本来使用XML导入导出数据, 奈何文件太大, 超过php的内存限制,找了个MySQL转SQLite的教本, 很好用, 分享。</p>
<p><strong>文件: </strong> mysql2sqlite.sh<br />
<span id="more-330"></span> </p>
<blockquote style="background:#333333;color:#ffffff;font-style:normal;"><p>
<font color="#ffff00">&nbsp;1 </font><font color="#00ffff">#!/bin/bash</font><br /> <br />
<font color="#ffff00">&nbsp;2 </font><font color="#00ffff"># MySQL 2 SQLite</font><br /> <br />
<font color="#ffff00">&nbsp;3 </font><font color="#ffff00">if </font><font color="#ffff00">[</font>&nbsp;<font color="#ffff00">&quot;</font><font color="#ffff00">x</font><font color="#ff40ff">$1</font><font color="#ffff00">&quot;</font>&nbsp;<font color="#ffff00">==</font>&nbsp;<font color="#ffff00">&quot;x&quot;</font>&nbsp;<font color="#ffff00">]</font><font color="#ffff00">;</font>&nbsp;<font color="#ffff00">then</font><br /> <br />
<font color="#ffff00">&nbsp;4 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">echo</font><font color="#ffff00">&nbsp;</font><font color="#ffff00">&quot;</font><font color="#ffff00">Usage: </font><font color="#ff40ff">$0</font><font color="#ffff00">&nbsp;&lt;dumpname&gt;</font><font color="#ffff00">&quot;</font><br /> <br />
<font color="#ffff00">&nbsp;5 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">exit</font><br /> <br />
<font color="#ffff00">&nbsp;6 </font><font color="#ffff00">fi</font><br /> <br />
<font color="#ffff00">&nbsp;7 </font><br /> <br />
<font color="#ffff00">&nbsp;8 </font>cat <font color="#ff40ff">$1</font>&nbsp;|<br /> <br />
<font color="#ffff00">&nbsp;9 </font><font color="#ffff00">grep</font>&nbsp;<font color="#ff40ff">-v</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">&nbsp;KEY &quot;</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">10 </font><font color="#ffff00">grep</font>&nbsp;<font color="#ff40ff">-v</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">&nbsp;UNIQUE KEY &quot;</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">11 </font><font color="#ffff00">grep</font>&nbsp;<font color="#ff40ff">-v</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">&nbsp;PRIMARY KEY </font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">12 </font><font color="#ffff00">sed</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">/^SET/d</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">13 </font><font color="#ffff00">sed</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">s/ unsigned / /g</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">14 </font><font color="#ffff00">sed</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">s/ auto_increment/ primary key autoincrement/g</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">15 </font><font color="#ffff00">sed</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">s/ smallint([0-9]*) / integer /g</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">16 </font><font color="#ffff00">sed</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">s/ tinyint([0-9]*) / integer /g</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">17 </font><font color="#ffff00">sed</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">s/ int([0-9]*) / integer /g</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">18 </font><font color="#ffff00">sed</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">s/ character set [^ ]* / /g</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">19 </font><font color="#ffff00">sed</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">s/ enum([^)]*) / varchar(255) /g</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">20 </font><font color="#ffff00">sed</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">s/ on update [^,]*//g</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">21 </font><font color="#ffff00">sed</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">s/</font><font color="#ff40ff">\\</font><font color="#ffff00">r</font><font color="#ff40ff">\\</font><font color="#ffff00">n/</font><font color="#ff40ff">\\</font><font color="#ffff00">n/g</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">22 </font><font color="#ffff00">sed</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">s/</font><font color="#ff40ff">\\</font><font color="#ffff00">&quot;/&quot;/g</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">23 </font>perl <font color="#ff40ff">-e</font>&nbsp;<font color="#ffff00">&#8216;</font><font color="#ffff00">local $/;$_=&lt;&gt;;s/,\n</font><font color="#ff40ff">\)</font><font color="#ffff00">/\n</font><font color="#ff40ff">\)</font><font color="#ffff00">/gs;print &quot;begin;\n&quot;;print;print &quot;commit;\n&quot;</font><font color="#ffff00">&#8216;</font>&nbsp;|<br /> <br />
<font color="#ffff00">24 </font>perl <font color="#ff40ff">-pe</font>&nbsp;<font color="#ffff00">&#8216;</font><br /> <br />
<font color="#ffff00">25 </font><font color="#ffff00">if (/^(INSERT.+?)</font><font color="#ff40ff">\(</font><font color="#ffff00">/) {</font><br /> <br />
<font color="#ffff00">26 </font><font color="#ffff00">&nbsp;&nbsp;$a=$1;</font><br /> <br />
<font color="#ffff00">27 </font><font color="#ffff00">&nbsp;&nbsp;s/</font><font color="#ff40ff">\\</font><font color="#ffff00">&#8216;</font><font color="#ff40ff">\&#8217;</font><font color="#ffff00">&#8216;</font><font color="#ffff00">/</font><font color="#ffff00">&#8216;</font><font color="#ff40ff">\&#8217;\&#8217;</font><font color="#ffff00">&#8216;</font><font color="#ffff00">/g;</font><br /> <br />
<font color="#ffff00">28 </font><font color="#ffff00">&nbsp;&nbsp;s/</font><font color="#ff40ff">\\</font><font color="#ffff00">n/\n/g;</font><br /> <br />
<font color="#ffff00">29 </font><font color="#ffff00">&nbsp;&nbsp;s/</font><font color="#ff40ff">\)</font><font color="#ffff00">,</font><font color="#ff40ff">\(</font><font color="#ffff00">/</font><font color="#ff40ff">\)</font><font color="#ffff00">;\n$a</font><font color="#ff40ff">\(</font><font color="#ffff00">/g;</font><br /> <br />
<font color="#ffff00">30 </font><font color="#ffff00">}</font><br /> <br />
<font color="#ffff00">31 </font><font color="#ffff00">&#8216;</font>&nbsp;<font color="#ffff00">&gt;</font>&nbsp;<font color="#ff40ff">$1</font>.sql<br /> <br />
<font color="#ffff00">32 </font>cat <font color="#ff40ff">$1</font>.sql | sqlite3 <font color="#ff40ff">$1</font>.db <font color="#ffff00">&gt;</font>&nbsp;<font color="#ff40ff">$1</font>.err<br /> <br />
<font color="#ffff00">33 </font><font color="#00ffff">ERRORS</font>=<font color="#ff40ff">cat </font><font color="#ff40ff">$1</font><font color="#ff40ff">.err </font><font color="#ffff00">|</font><font color="#ff40ff">&nbsp;wc -l</font><br /> <br />
<font color="#ffff00">34 </font><font color="#ffff00">if </font><font color="#ffff00">[</font>&nbsp;<font color="#ff40ff">$ERRORS</font>&nbsp;<font color="#ffff00">==</font>&nbsp;<font color="#ffff00">0</font>&nbsp;<font color="#ffff00">]</font><font color="#ffff00">;</font>&nbsp;<font color="#ffff00">then</font><br /> <br />
<font color="#ffff00">35 </font>&nbsp;&nbsp;<font color="#ffff00">echo</font><font color="#ffff00">&nbsp;</font><font color="#ffff00">&quot;</font><font color="#ffff00">Conversion completed without error. Output file: </font><font color="#ff40ff">$1</font><font color="#ffff00">.db</font><font color="#ffff00">&quot;</font><br /> <br />
<font color="#ffff00">36 </font>&nbsp;&nbsp;<font color="#ffff00">rm</font>&nbsp;<font color="#ff40ff">$1</font>.sql<br /> <br />
<font color="#ffff00">37 </font>&nbsp;&nbsp;<font color="#ffff00">rm</font>&nbsp;<font color="#ff40ff">$1</font>.err<br /> <br />
<font color="#ffff00">38 </font><font color="#ffff00">else</font><br /> <br />
<font color="#ffff00">39 </font>&nbsp;&nbsp;<font color="#ffff00">echo</font><font color="#ffff00">&nbsp;</font><font color="#ffff00">&quot;</font><font color="#ffff00">There were errors during conversion.&nbsp;&nbsp;Please review </font><font color="#ff40ff">$1</font><font color="#ffff00">.err and </font><font color="#ff40ff">$1</font><font color="#ffff00">.sql for details.</font><font color="#ffff00">&quot;</font><br /> <br />
<font color="#ffff00">40 </font><font color="#ffff00">fi</font><br /> <br />
<font color="#ffff00">41 </font> # 来源 http://www.sqlite.org/cvstrac/wiki?p=ConverterTools <br /> 
</p></blockquote>
<p><strong>转换步骤: </strong> </p>
<blockquote style="font-style:normal;"><p>
#导出WordPress数据库<br />
user@localhost:~$ mysqldump -u root -p &#8211;compatible=ansi &#8211;skip-opt wordpress &gt; MyBlog.sql</p>
<p>#转换.sql至SQLite数据库文件<br />
user@localhost:~$ sh mysql2sqlite.sh MyBlog.sql</p>
<p>user@localhost:~$ mv MyBlog.db /srv/httpd/wordpress/wp-content/database/MyBlog.sqlite
</p></blockquote>
<p>注: 这个脚本应急还行,但是布署会成问题(转换的字段类型偏差),建议手工校对表结构,添加索引。最后,在linux上,得把sqlite文件的读写权限赋予httpd用户。</p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/convert-mysql-to-sqlite-script-330.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>按照自己的方式，去度过人生!</title>
		<link>http://mifunny.info/a-life-just-for-me-324.html</link>
		<comments>http://mifunny.info/a-life-just-for-me-324.html#comments</comments>
		<pubDate>Thu, 28 Jan 2010 13:08:08 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[Google热榜]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Study notes]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[かわいい玩具]]></category>
		<category><![CDATA[一半动漫]]></category>
		<category><![CDATA[听听音乐]]></category>
		<category><![CDATA[吹水唬滥]]></category>
		<category><![CDATA[大佛Linux]]></category>
		<category><![CDATA[就评电影]]></category>
		<category><![CDATA[心情札记]]></category>
		<category><![CDATA[时事快评]]></category>
		<category><![CDATA[本民经济]]></category>
		<category><![CDATA[此间Web]]></category>
		<category><![CDATA[漫谈人物]]></category>
		<category><![CDATA[版本控制]]></category>
		<category><![CDATA[疮痍广告]]></category>
		<category><![CDATA[百度风云榜]]></category>
		<category><![CDATA[设计模式]]></category>
		<category><![CDATA[读书时间]]></category>
		<category><![CDATA[软件笑谈]]></category>
		<category><![CDATA[那些技术]]></category>
		<category><![CDATA[人生]]></category>

		<guid isPermaLink="false">http://mifunny.info/a-life-just-for-me-324.html</guid>
		<description><![CDATA[昨晚11点, 第三次读完《明朝那些事儿》, 彻夜未眠. LD 并不是个聪明的人, 前两次均未理解所谓历史 所谓宿命 所谓自由. 这半年, 从09年9月, 第三次读《明》, 完全不同的感受, 石悅的历史观也许是悲观的, 正如他如是说. 然, LD 是悲愤的! 可以活得唯唯缩缩, 可以轰轰烈烈, 也可平平淡淡, 人之所以为人, 就是与别个不同. 10月, LD 曾慕名前往于谦祠, 旁边帅GG 惊呼: 于谦? 谁啊? 好像以前学过&#8230; 是啊~ 我也是. 强人只是那么一瞬间, 那一刻 绽放比凡人璀璨的花火, 之后殒灭为尘秽, 清澈、汙浊平凡无异. 生活的目标 一点足矣, 开心. 礼义廉耻 忠义孝廉 儿戏 儿戏, 二十几年来, 从没有这么坚定, 从没有这么澄净. 引用《火鳳燎原》中那句话: 属于我的这个年代, 将比任何朝代来得久远!]]></description>
			<content:encoded><![CDATA[<p>昨晚11点, 第三次读完《明朝那些事儿》, 彻夜未眠. </p>
<p>LD 并不是个聪明的人, 前两次均未理解所谓历史 所谓宿命 所谓自由. 这半年, 从09年9月, 第三次读《明》, 完全不同的感受, 石悅的历史观也许是悲观的, 正如他如是说. 然, LD 是悲愤的! </p>
<p>可以活得唯唯缩缩, 可以轰轰烈烈, 也可平平淡淡, 人之所以为人, 就是与别个不同. 10月, LD 曾慕名前往于谦祠, 旁边帅GG 惊呼: 于谦? 谁啊? 好像以前学过&#8230;  是啊~ 我也是. 强人只是那么一瞬间, 那一刻 绽放比凡人璀璨的花火, 之后殒灭为尘秽, 清澈、汙浊平凡无异.</p>
<p>生活的目标 一点足矣, 开心. 礼义廉耻 忠义孝廉 儿戏 儿戏, 二十几年来, 从没有这么坚定, 从没有这么澄净. 引用《火鳳燎原》中那句话: 属于我的这个年代, 将比任何朝代来得久远!</p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/a-life-just-for-me-324.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在SHELL下计算文件/文件夹数目</title>
		<link>http://mifunny.info/count-file-with-shell-find-type-and-wc-268.html</link>
		<comments>http://mifunny.info/count-file-with-shell-find-type-and-wc-268.html#comments</comments>
		<pubDate>Thu, 20 Aug 2009 14:45:00 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[Shell]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[maxdeth]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[wc]]></category>
		<category><![CDATA[计算文件数]]></category>

		<guid isPermaLink="false">http://mifunny.info/count-file-with-shell-find-type-and-wc-268.html</guid>
		<description><![CDATA[某日连上ssh， 突然想算一下当前目录下的文件数，有些悲哀，不会了！ 工作都是拿windows开发，然后ftp到服务器上， 自己尽然忘记曾经那么熟悉，那么喜欢的Linux。 网上搜了一下，大致是这个样子的： user@~$ ls -lh &#124; grep &#8220;^-&#8221; &#124; wc -l #上面的方法，计算当前目录下的文件数 user@~$ ls -lh &#124; grep &#8220;^d&#8221; &#124; wc -l #计算当前目录下的文件夹数 用人肉去数一下，发现错了！ 原因分析一下每个命令的含义。。。 后来一想，其实计算用wc， 找文件find不是最强，&#8211;》搞定！ so follow me user@~$ find ./ -maxdeth 1 -type f &#124; wc -l #计算当前目录文件数 user@~$ find ./ -maxdeth 1 -type d &#124; wc -l #计算文件夹数 find [...]]]></description>
			<content:encoded><![CDATA[<p>某日连上ssh， 突然想算一下当前目录下的文件数，有些悲哀，不会了！ 工作都是拿windows开发，然后ftp到服务器上， 自己尽然忘记曾经那么熟悉，那么喜欢的Linux。</p>
<p>网上搜了一下，大致是这个样子的：</p>
<p><span id="more-268"></span></p>
<blockquote class="console"><p>
<span class="hint">user@~$  </span>ls -lh | grep &#8220;^-&#8221; | wc -l<br />
<br />#上面的方法，计算当前目录下的文件数<br />
<br />
<span class="hint">user@~$  </span>ls -lh | grep &#8220;^d&#8221; | wc -l<br />
<br />#计算当前目录下的文件夹数
</p></blockquote>
<p>用人肉去数一下，发现错了！ 原因分析一下每个命令的含义。。。 后来一想，其实计算用wc， 找文件find不是最强，&#8211;》搞定！ so follow me</p>
<blockquote class="console"><p>
<span class="hint">user@~$ </span>find  ./  -maxdeth 1 -type f | wc -l      #计算当前目录文件数<br />
<br /><span class="hint">user@~$ </span>find  ./  -maxdeth 1 -type d | wc -l      #计算文件夹数
</p></blockquote>
<p>find 命令用法 参数 maxdeth 搜索目录深度；   如果要计算文件和文件夹总数，把type参数去掉。</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=72b25d6f-4b49-8dab-97af-b6e4ec180f4a" /></div>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/count-file-with-shell-find-type-and-wc-268.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Linux乎？ Pacman乎？ 迅雷乎？</title>
		<link>http://mifunny.info/pacman-to-xunlei-119.html</link>
		<comments>http://mifunny.info/pacman-to-xunlei-119.html#comments</comments>
		<pubDate>Wed, 01 Oct 2008 15:05:49 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[Shell]]></category>
		<category><![CDATA[大佛Linux]]></category>
		<category><![CDATA[pacman]]></category>
		<category><![CDATA[xunlei]]></category>
		<category><![CDATA[迅雷]]></category>

		<guid isPermaLink="false">http://mifunny.info/pacman-to-xunlei-119.html</guid>
		<description><![CDATA[本文讨论一种极其无耻的行为: 把 Arch Linux 中 pacman 的下载链接转换成迅雷(xunlei)的下载列表。 洁身自好者请闪避！ 话说世风日下，是个人就用迅雷，再好的网络也得崩溃，何况这边已经惨不忍睹的6栋大楼！ 习惯了 Linux 带给我的自由，所以对待winner一直旁观者清。 国之诞辰，无聊四起，于是winner们大开迅雷，linux下那些本分的下载工具纷纷息鼓，奈何我一个星期没有更新系统、还想安个e17玩玩…… 怎么办？ 再牛逼的肖邦也弹不出老子的悲伤。 好吧，那么咱也开迅雷（虚拟机）对耗。 Arch Linux 的包管理器是 pacman ，而 pacman 是可以自定义下载器的（其他发行版应该也行）; 以前有过例子了: 修改arch下的pacget脚本。 所以这回直接写个脚本提取下载链接， 转换成迅雷的下载列表，最后在虚拟机里导入迅雷即可。 麻烦一点，总比没有好。 脚本如下_（狂击这里下载）： #!/bin/bash # @script: pac2lst [pacman to xunlei list] &#038;&#38; @author: LD King cachedir=/var/cache/pacman/pkg lstfile=/etc/pacman.d/xunlei.lst file=`echo $1&#124;awk -F &#8216;/&#8217; &#8216;{ print $NF }&#8217;` recordurl=1 if [[ $2 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #655F5F;">本文讨论一种<em>极其无耻</em>的行为: 把 Arch Linux 中 pacman 的下载链接转换成迅雷(xunlei)的下载列表。 <br /><strong>洁身自好者请闪避！</strong></span></p>
<p style="text-indent: 2em" >话说世风日下，是个人就用迅雷，再好的网络也得崩溃，何况这边已经惨不忍睹的6栋大楼！ 习惯了 Linux 带给我的自由，所以对待winner一直旁观者清。 国之诞辰，无聊四起，于是winner们大开迅雷，linux下那些本分的下载工具纷纷息鼓，奈何我一个星期没有更新系统、还想安个e17玩玩…… 怎么办？ 再牛逼的肖邦也弹不出老子的悲伤。</p>
<p style="text-indent: 2em" >好吧，那么咱也开迅雷（虚拟机）对耗。 Arch Linux 的包管理器是 pacman ，而 pacman 是可以自定义下载器的（其他发行版应该也行）; 以前有过例子了: <a href="http://mifunny.info/arch-pacget-script-57.html" title="修改了arch下的pacget脚本，可以和pacman同用一个mirrorlist了" alt="arch linux pacget pacman" target="_bank" >修改arch下的pacget脚本</a>。 所以这回直接写个脚本提取下载链接， 转换成迅雷的下载列表，最后在虚拟机里导入迅雷即可。 麻烦一点，总比没有好。</p>
<p>脚本如下_（<a href="http://nothing-at-all.googlecode.com/files/pac2lst.zip" target="_bank" alt="pac2lst pacman 迅雷">狂击这里下载</a>）：<br /><span id="more-119"></span><coolcode><br />
#!/bin/bash<br />
# @script: pac2lst [pacman to xunlei list] &&amp; @author: LD King <http ://mifunnny.info/><br />
cachedir=/var/cache/pacman/pkg<br />
lstfile=/etc/pacman.d/xunlei.lst<br />
file=`echo $1|awk -F &#8216;/&#8217; &#8216;{ print $NF }&#8217;`<br />
recordurl=1</p>
<p>if [[ $2 = *.db.tar.gz.part &&amp;  -f $cachedir/$file ]]; then<br />
	repo=`echo $1|awk -F &#8216;/&#8217; &#8216;{x=NF-3 } { print  $x }&#8217;`<br />
  	echo  -n &#8220;Use local $repo db? (Y/N)_&#8221;<br />
	read ANSWER<br />
	case $ANSWER in<br />
  		[Yy]*)<br />
  			echo &#8220;Choose Yes.&#8221;<br />
			recordurl=0<br />
			repodir=/var/lib/pacman<br />
			cp  $cachedir/$file  $repodir/$file<br />
			;;<br />
		*)<br />
			echo &#8220;Choose No.&#8221;<br />
			;;<br />
	esac<br />
fi</p>
<p>if [ $recordurl = 1 ]; then<br />
  echo -e $1|\n >> $lstfile<br />
  echo Record URL for $file<br />
fi<br />
# Script DONE<br />
</coolcode><br />
<strong>使用步骤：</strong><br />
<br />1.把脚本拷贝到PATH中，然后修改 pacman.conf</p>
<table style="border:2px solid #E0E0E0;" >
<tr>
<td><span style="color: gray;">user@~$</span> sudo cp pac2lst /usr/bin/<br /><span style="color: gray;">user@~$</span> sudo chmod +x /usr/bin/pac2lst</p>
<p><span style="color: gray;">user@~$</span> sudo vim /etc/pacman.conf<br /># 注释掉所有含 XferCommand 的行，然后添加下面这行<br />XferCommand = /usr/bin/pac2lst %u %o </td>
</tr>
</table>
<p>2.使用 pacman 命令生成迅雷的下载列表（/etc/pacman.d/xunlei.lst）</p>
<table style="border:2px solid #E0E0E0;" >
<tr>
<td><span style="color: gray;">user@~$</span> sudo pacman -Su<br /># 其他涉及下载的命令都会把软件包链接写入 xunlei.lst 中; <br /># 所以每次生成列表后，就把文件 xunlei.lst 移走<br /><span style="color: gray;">user@~$</span> sudo mv /etc/pacman.d/xunlei.lst  ~/share </td>
</tr>
</table>
<p>3.开虚拟机，在迅雷的菜单中选中 &#8220;导入下载列表&#8221;， 选择 xunlei.lst
<p align="center" ><img class="frame" src="http://lh3.ggpht.com/kldscs/SOMq2F-P5QI/AAAAAAAAA30/BDFZXRNkQpU/s800/pac2lst.png" title="在迅雷中导入下载列表" alt="迅雷 下载列表 pac2lst" /><br />在迅雷中导入下载列表</p>
<p>4.下载完后，把软件包拷到与 linux 的共享目录下， 再执行一遍刚才的命令即可</p>
<table style="border:2px solid #E0E0E0;" >
<tr>
<td><span style="color: gray;">user@~$</span> sudo mv ~/share/*.tar.gz  /var/cache/pacman/pkg/<br /><span style="color: gray;">user@~$</span> sudo pacman -Su</td>
</tr>
</table>
<p style="text-indent: 2em" >这种方法虽然麻烦，但是确实有效，迅雷在极端环境下比linux的那些下载工具强太多（e.g. wget、aria2c、curl&#8230;）; 希望国内软件服务快快进入linux, 阉割版的linuxqq总比没有强!</p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/pacman-to-xunlei-119.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>修改了arch下的pacget脚本，可以和pacman同用一个mirrorlist了</title>
		<link>http://mifunny.info/arch-pacget-script-57.html</link>
		<comments>http://mifunny.info/arch-pacget-script-57.html#comments</comments>
		<pubDate>Mon, 14 Jul 2008 06:55:40 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[Shell]]></category>
		<category><![CDATA[大佛Linux]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[pacman]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://mifunny.info/?p=57</guid>
		<description><![CDATA[经历半个月，终于考完试; 到长沙的中软国际傻傻的走了一遭； 做着严重超载的火车回到了家; 躺在当年的床上，混混沌沌地睡了一天办； 把家里老机子上的arch升级并重新布置了一下桌面 只是家里的网速太慢，pacman使用wget更新很稳定的10kb/s，急煞人也！！ 没法搬出以前linuxsir论坛上找到的pacget脚本，修改了一下，使它和pacman使用同样的mirrorlist。 #!/bin/bash #pacget script cachedir=/var/cache/pacman/pkg rm -f $cachedir/*.aria2 file=`echo $1&#124;awk -F &#8216;/&#8217; &#8216;{ print $NF }&#8217;` echo Downloading: $file&#124;sed &#8216;s,/,,&#8217; repo=`echo $1&#124;awk -F &#8216;/&#8217; &#8216;{x=NF-3 } { print $x }&#8217;` echo %repo: $repo mirrors=`sed -n &#8216;s/^Server = //; s/$repo/&#8217;$repo&#8217;/ ; s,$,/&#8217;&#8221;/$file&#8221;&#8216;, ; /^ftp/p; /^http/p&#8217; /etc/pacman.d/mirrorlist` if [[ $2 = [...]]]></description>
			<content:encoded><![CDATA[<p style="text-indent: 4mm" >经历半个月，终于考完试; 到长沙的中软国际傻傻的走了一遭； 做着严重超载的火车回到了家; 躺在当年的床上，混混沌沌地睡了一天办； 把家里老机子上的arch升级并重新布置了一下桌面</p>
<p style="text-indent: 4mm" > 只是家里的网速太慢，pacman使用wget更新很稳定的10kb/s，急煞人也！！ 没法搬出以前linuxsir论坛上找到的pacget脚本，修改了一下，使它和pacman使用同样的mirrorlist。
</p>
<p><coolcode lang="shell"><br />
#!/bin/bash<br />
#pacget script </p>
<p>cachedir=/var/cache/pacman/pkg<br />
rm -f $cachedir/*.aria2<br />
file=`echo $1|awk -F &#8216;/&#8217; &#8216;{ print $NF }&#8217;`<br />
echo Downloading: $file|sed &#8216;s,/,,&#8217;<br />
repo=`echo $1|awk -F &#8216;/&#8217; &#8216;{x=NF-3 } { print  $x }&#8217;`<br />
echo %repo: $repo<br />
mirrors=`sed -n &#8216;s/^Server = //; s/$repo/&#8217;$repo&#8217;/ ; s,$,/&#8217;&#8221;/$file&#8221;&#8216;, ; /^ftp/p; /^http/p&#8217; /etc/pacman.d/mirrorlist`</p>
<p>if [[ $2 = *.db.tar.gz.part || $repo = "testing" ]]; then<br />
       echo &#8220;(using one mirror: $1 )&#8221;<br />
       mirrors=$1<br />
       cachedir=/var/lib/pacman<br />
fi </p>
<p>aria2c -t60 -m5 -l /var/log/pacget.log $mirrors -o $file.pacget<br />
if [ -f $cachedir/$file.pacget.aria2 ]; then<br />
	exit 130<br />
fi<br />
mv $file.pacget $2<br />
</coolcode></p>
<p style="text-indent: 4mm" >还是没有给我失望，下载速度提上去了； 不是最快，但满足了 <img src='http://mifunny.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':smile:' class='wp-smiley' />
</p>
<p><span id="more-57"></span><br />
<img class="frame" src="http://lh4.ggpht.com/kldscs/SHryujXvQ5I/AAAAAAAAASM/r_pNbTATpOM/s800/aria2.png" title="pacget运行截图" alt="pacget aria2c 绑定到 pacman" width="530" height="40" /><br />
还有我的mirrorlist<br />
<coolcode><br />
#<br />
# Arch Linux repository mirrorlist<br />
#<br />
Server = ftp://ftp.archlinux.org/$repo/os/i686<br />
Server = http://mirror.lupaworld.com/archlinux/$repo/os/i686<br />
Server = ftp://archlinux.gooth.cn/public/$repo/os/i686<br />
Server = ftp://mirror.pacific.net.au/linux/archlinux/$repo/os/i686<br />
Server = ftp://cle.linux.org.tw/pub/ArchLinux/$repo/os/i686<br />
#<br />
Server = http://mirrors.lcuc.org.cn/archlinux/$repo/os/i686<br />
Server = http://darkstar.ist.utl.pt/archlinux/$repo/os/i686<br />
Server = ftp://ftp.belnet.be/packages/archlinux/$repo/os/i686<br />
Server = http://distro.ibiblio.org/pub/linux/distributions/archlinux/$repo/os/i686<br />
Server = ftp://mirror.cs.vt.edu/pub/ArchLinux/$repo/os/i686<br />
Server = http://mirrors.easynews.com/linux/archlinux/$repo/os/i686<br />
</coolcode></p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/arch-pacget-script-57.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[shell脚本]文件编码转换</title>
		<link>http://mifunny.info/convert-coding-script-52.html</link>
		<comments>http://mifunny.info/convert-coding-script-52.html#comments</comments>
		<pubDate>Wed, 18 Jun 2008 03:00:38 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[Shell]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[大佛Linux]]></category>

		<guid isPermaLink="false">http://mifunny.info/convert-coding-script-52.html</guid>
		<description><![CDATA[昨天晚上写的文件转码脚本，可以遍历目录，把给出的目录下（包括子目录）的GB2312文件转成UTF-8编码的; 当然,也可以修改文件开始的常量定义来完成其他类型文件和编码之间的转换; sh&#160;&#160; convert2.sh &#160;&#160; /your_path/ 文件：convert2.sh 文件详细内容： #!/bin/bash # -*- coding: UTF-8 -*- # #@filename: convert2.sh #@version: $0.2$ #@date: 2008/06/17 #@author: U{kldoo ... kldscs @gmail.com} #@license: LGPL #@see: 《Advanced Bash-Scripting Guide》 # http://wlx.westgis.ac.cn/42/ # http://blog.csdn.net/shrekmu/archive/2006/12/20/1450643.aspx #@note: 转换文件gb2312编码至UTF-8编码 # FILE_TYPE=".txt" #需转码的文件类型,所有文件的话置空 NUM_TYPE=`echo $FILE_TYPE &#124; wc -c` #文件类型的长度 CODING_1="GB2312" #原文件编码 CODING_2="UTF-8" #转换后的编码 # 所有编码可以在shell下输入 iconv -l [...]]]></description>
			<content:encoded><![CDATA[<p style="text-indent: 4mm" >昨天晚上写的文件转码脚本，可以遍历目录，把给出的目录下（包括子目录）的GB2312文件转成UTF-8编码的;</p>
<p style="text-indent: 4mm" >当然,也可以修改文件开始的常量定义来完成其他类型文件和编码之间的转换;
</p>
<table style="border:2px solid #E0E0E0; background-color: #BFF0FF;">
<tr>
<td>sh&nbsp;&nbsp;  convert2.sh &nbsp;&nbsp; /your_path/</td>
</tr>
</table>
<p>文件：<a href="http://mifunny.info/blog/uploads/2008/06/convert2.sh" title="文件编码转换">convert2.sh</a><br />
文件详细内容：<br />
<span id="more-52"></span>
<pre name="code" class="python:nocontrols:nogutter">
#!/bin/bash
# -*- coding: UTF-8 -*-
#
#@filename: convert2.sh
#@version: $0.2$
#@date: 2008/06/17
#@author: U{kldoo ... kldscs @gmail.com}
#@license: LGPL
#@see: 《Advanced Bash-Scripting Guide》
#  	http://wlx.westgis.ac.cn/42/
#       http://blog.csdn.net/shrekmu/archive/2006/12/20/1450643.aspx
#@note: 转换文件gb2312编码至UTF-8编码
#
FILE_TYPE=".txt"     #需转码的文件类型,所有文件的话置空
NUM_TYPE=`echo $FILE_TYPE | wc -c`   #文件类型的长度
CODING_1="GB2312"	#原文件编码
CODING_2="UTF-8" 	#转换后的编码
# 所有编码可以在shell下输入 iconv -l 查看
SUFFIX="_tmp" #零时文件的后缀

convert(){
#转换指定文件的编码
	tmp=$file$SUFFIX
	echo "Converting... $file from  $CODING_1 to $CODING_2 ."
	iconv -f $CODING_1 -t $CODING_2 $file -o $tmp
	mv $tmp $file
	#sleep 1
}

foreachd(){
#递归遍历目录
  for file in $1/*
  do
  # 如果是目录就打印处理，然后继续遍历，递归调用
    if [ -d $file ]
    then
      foreachd $file
    else
      NUM_FILE=`echo $file | wc -c`
      if [ ${file:${NUM_FILE}-${NUM_TYPE}:$NUM_TYPE} == $FILE_TYPE ]
      then
	convert "$file"
      fi
    fi
  done
}

# 遍历转换参数1目录下的文件编码
if [ $# == 1 ]
then
  foreachd "$1"
else
  echo "argv error!"
fi
# END file
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/convert-coding-script-52.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

