Добавление одинакового текста во все файлы каталога - PullRequest
1 голос
/ 14 декабря 2011

У меня есть одна папка.В этой папке 32 файла и 3 каталога.Я хочу добавить несколько строк текста в каждом файле вверху.Как я могу это сделать?

Ответы [ 3 ]

6 голосов
/ 14 декабря 2011

Используйте File :: Find , чтобы найти файлы.Используйте Tie :: File и unshift , чтобы добавить строки в начало файла.

2 голосов
/ 16 декабря 2011

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;
}
0 голосов
/ 14 декабря 2011

Это может работать:

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

Пожалуйста, попробуйте это на копии своего каталога, чтобы убедиться, что он делает то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...