2008年12月7日星期日

Re: [PerlChina] 文件描述符如何同时读写( 以不使用<>的方式更新文件 )

2008/12/7 owen nirvana <freeespeech@gmail.com>
我想批量替换某些文件的内容,按照learning perl 的方法可以从命令行读入,但是这种情况似乎并不适用于目录嵌套的情况,

在 *NIX 下,我一般会这么写:

$ find /some/dir -name '*.foo' | xargs ./my-script.pl

对于常见的正则可以搞定的批量替换,我一般会直接使用 sed -i 's/foo/bar/g',必要时辅之以 find 命令 :)

如果希望 native Win32 也好使,使用 File::Find 挺好的,呵呵。如果自己用 opendir/readdir 啥的遍历目录树。

文件的修改,通常的做法是,先读取文件 foo,然后把修改后的写到一个临时文件中,写完之后,再把临时文件覆盖掉原始文件 foo。

如果 foo 不是很大,可以一口气先读到 RAM 中来,关闭掉读句柄,再以写方式打开 foo,把东西再写进 foo 文件里。但这种方法存在丢数的风险,假设程序在写 foo 的过程中掉电,或者被 Ctrl-C 了,那么我们就丢失了数据。所以对于比较严肃的事情,一般不推荐,呵呵 :)

Bye,
-agentzh

没有评论: