[Cascavel-pm] Criar diretorio/subdiretorio
Luis Motta Campos
luismottacampos em yahoo.co.uk
Terça Maio 8 10:36:08 PDT 2007
On May 8, 2007, at 6:57 PM, Patty Silva wrote:
> Ola Pessoal..
> Estou gerando uns arquivos e quero grava-los em diretorios com o
> ano mes e dia (algo organizado), estou fazendo:
> ex:
>
> my $date = '20030512';
> my ($year,$month,$day) = $date =~ /^(\d{4})(\d{2})(\d{2})$/;
>
> mkdir $year unless -d $year;
> mkdir "$year/$month" unless -d "$year/$month";
> mkdir "$year/$month/$day" unless -d "$year/$month/$day";
>
> Tem outra maneira?
> Outra coisa... tenho que verificar se ja existe para nao criar de
> novo..
Aarrggghh!!
Patty, depois de tanto tempo, você já deveria saber que tem sempre
mais de uma maneira... ;-)
E você tem um talento fantástico para escolher sempre as mais
feias, deselegantes e desajeitadas...
Aqui:
#!perl
use strict;
use warnings;
use DateTime;
sub create_directory {
my $path = shift;
return if -d $path;
mkdir $path;
}
sub create_year_directory {
my ( $basedir, $path ) = @_;
return unless $year =~ m{^\d+$};
my $path = qq{$basedir/$year};
create_directory( $path );
}
sub create_month_directory {
my ( $basedir, $year, $month ) = @_;
return unless $month =~ m{^(:?0[0-9]|1[012])$};
create_year_directory( $basedir, $year );
my $path = qq{$basedir/$year/$month};
create_directory( $path );
}
sub create_day_directory {
my ( $basedir, $year, $month, $day ) = @_;
return unless $day =~ m{^(:?[012]\d|3[01])};
create_month_directory( $basedir, $year, $month );
my $path = qq{$basedir/$year/$month/$day};
create_directory( $path );
}
# BASEDIR é o lugar onde você vai construir esta "árvore" de
diretórios.
my $basedir = '/opt/data';
# Crie datas facilmente com o DateTime:
my $today = DateTime->now( time_zone => 'America/Sao_Paulo' )-
>truncate( to => 'day' );
# Construa seus diretórios facilmente com uma única chamada:
create_day_directory $basedir, $today->year, $today->month, $today-
>day;
É tudo. Não testei!
Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}
Mais detalhes sobre a lista de discussão Cascavel-pm