我想批量替换某些文件的内容,按照learning perl 的方法可以从命令行读入,但是这种情况似乎并不适用于目录嵌套的情况,
$ 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
没有评论:
发表评论