2008/12/7 owen nirvana <span dir="ltr">&lt;<a href="mailto:freeespeech@gmail.com">freeespeech@gmail.com</a>&gt;</span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
我想批量替换某些文件的内容,按照learning perl 的方法可以从命令行读入,但是这种情况似乎并不适用于目录嵌套的情况,<br>
</blockquote><div><br></div></div>在 *NIX 下,我一般会这么写:<br><br>$ find /some/dir -name &#39;*.foo&#39; | xargs ./my-script.pl<br><br>对于常见的正则可以搞定的批量替换,我一般会直接使用 sed -i &#39;s/foo/bar/g&#39;,必要时辅之以 find 命令 :)<br><br>如果希望 native Win32 也好使,使用 File::Find 挺好的,呵呵。如果自己用 opendir/readdir 啥的遍历目录树。<br>
<br>文件的修改,通常的做法是,先读取文件 foo,然后把修改后的写到一个临时文件中,写完之后,再把临时文件覆盖掉原始文件 foo。<br><br>如果 foo 不是很大,可以一口气先读到 RAM 中来,关闭掉读句柄,再以写方式打开 foo,把东西再写进 foo 文件里。但这种方法存在丢数的风险,假设程序在写 foo 的过程中掉电,或者被 Ctrl-C 了,那么我们就丢失了数据。所以对于比较严肃的事情,一般不推荐,呵呵 :)<br><br>
Bye,<br>-agentzh<br><br>