01:56:13 06.06.2011
Полезный код на perl'e для работы с деревом файлов
Полезный код из книжки Mark Jason Dominius "Higher-Order Perl. Transforming Programs with Programs" для работы с папками и файлами. Функция dir_walk обходит все файлы и вложенные папки и вызывает для каждого из них функцию переданную в параметре:
sub dir_walk {
my ($top, $filefunc, $dirfunc) = @_;
my $DIR;
if (-d $top) {
my $file;
unless (opendir $DIR, $top) {
warn "Couldn't open directory top: $!; skipping.\n";
return;
}
my @results;
while ($file = readdir $DIR) {
next if $file eq '.' || $file eq '..';
push @results, dir_walk("$top/$file", $filefunc, $dirfunc);
}
return $dirfunc ? $dirfunc->($top, @results) : () ;
} else {
return $filefunc ? $filefunc->($top): () ;
}
}
Примеры (тоже из книжки). Печать файлов и папок:
dir_walk('.', sub{ print $_[0], "\n"}, sub{ print $_[0], "\n"})
Размер файлов и папок:
sub file_size{
-s $_[0]
}
sub dir_size{
my $dir = shift;
my $total = -s $dir;
my $n;
for $n (@_) {$total += $n}
return $total;
}
my $total=dir_walk('.', \&file_size, \&dir_size);
Похожие записи
11:37:20 06.06.2011
Вася
Morgan Kaufman - это название издательства. Автор книги - Mark Jason Dominius.
12:44:02 06.06.2011
sn
ой, поправила
19:18:44 06.06.2011
Oleg Alistratov
use File::Find;
find( sub { ... }, '/###');
Даже HOP надо принимат критически.
Подпишитесь, чтобы не пропустить новые посты!
Приглашаем присоединиться к нашему блогу. Следите за нами:
|
|
|