【发布时间】:2015-06-18 22:36:47
【问题描述】:
我有一个简单的 Perl 脚本,我想在一个充满 .txt 文件的文件夹上运行它。
我阅读了How do I run a Perl script on multiple input files with the same extension? 的答案,但不明白如何实施答案。
我在 Google 上搜索过等,但不明白 perlmonks 上的答案。
在我正在使用的 Mac OS 终端上
perl myscript.pl input.txt > output.txt
但我不知道如何在一个充满 .txt 文件的文件夹上运行它。
我会满足于生成一组新的修改后的 .txt 文件(每个输入一个输出)或编辑文件并用输出覆盖输入(如果这样更容易的话)。
【问题讨论】:
-
看核心模块 File::Find perldoc.perl.org/File/Find.html
-
你想怎么做?您可以在 Perl 或 shell 中编写一个包装器,为给定目录中的每个文本文件调用您的程序,或者您可以修改您的 Perl 程序以处理许多文件,而不仅仅是一个文件。一种中间解决方案是重写
myscript.pl以接受任意数量的文件并使用perl myscript.pl *.txt调用它。这样,它仍然可以像现在一样工作。选择权在您手中——没有比任何其他选项更简单的选项了 -
@NeilHWatson:
File::Find不适合处理单个目录中的所有文本文件。很可能glob或opendir/readdir是最佳选择。或者,正如我所说,让 shell 使用通配符参数来查找文件 -
更具体。你想要
perl myscript.pl in1.txt > out1.txt ; perl myscript.pl in2.txt > out2.txt的等价物吗?还是perl myscript.pl in1.txt in2.txt > out.txt?还是perl myscript.pl file1.txt > file1.txt ; perl myscript.pl file2.txt > file2.txt(假设您可以这样做而不会在处理之前破坏输入)?只有一个文件夹,还是您想在嵌套的子文件夹中递归工作?myscript.pl是否接受多个文件名参数?您为什么不向我们展示您的尝试? -
有什么理由不使用
perl -i.old myscript.pl *.txt?这假设脚本不会显式打开文件,而只是使用while (<>)或等效项来读取文件,并使用print或等效项来写入输出。.old是添加到文件名的后缀;您可以省略它并覆盖原件。
标签: perl command-line