将相同的文本添加到目录的所有文件中

时间:2011-12-14 16:28:09

标签: perl file

我有一个文件夹。该文件夹中有32个文件和3个目录。我想在顶部的每个文件上添加一些文本行。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:6)

使用File::Find查找文件。使用Tie::Fileunshift将行添加到文件顶部。

答案 1 :(得分:2)

TLP已经告诉过你如何解决问题的一些提示。但总有一种方法可以做到这一点。而不是File :: Find和Tie :: File我将使用一些更“现代”的模块。在这些完整的例子中,我使用带有迭代接口的Path :: Class :: Rule而不是我更喜欢的递归接口。

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use open ':encoding(UTF-8)';
use open ':std';
use Path::Class;
use Path::Class::Rule;

my $rule = Path::Class::Rule->new->file;
my $iter = $rule->iter(dir('test'));

while ( my $file = $iter->() ) {
    print $file->stringify, "\n";
    add_line_to_file($file, "Sid was here.\n");
}

# 1: Path::Class::File Object
# 2: The Line
sub add_line_to_file {
    my ( $file, $line ) = @_;

    # Open File - return IO::File object
    my $fh = $file->open('>>') or die "Cannot open $file: $!\n";
    # Seek to end
    $fh->seek(0, 2);
    # Add line
    $fh->print($line);
    $fh->close;

    return;
}

答案 2 :(得分:0)

这可行:

perl -pi -e 's/^/my text\n/' * */*

请在您的目录副本上试一试,以确保它符合您的要求。