[Perl] Leer contenido de un directorio y escribirlo en pequeños archivos

Mauricio Herrera Cuadra mauricio en arareko.net
Mie Abr 30 12:50:16 CDT 2008


Quizás no necesites Perl, algo como esto es más rápido (en mi opinión):

-----------------------------------------------------------------
% mkdir files && cd files && ls /etc/ > list && split -l 15 list
% ls
list    xaa     xab     xac     xad     xae     xaf     xag
% cat xaa
X11
aliases
amd.map
apmd.conf
auth.conf
bluetooth
crontab
csh.cshrc
csh.login
csh.logout
defaults
devd.conf
devfs.conf
dhclient.conf
disktab
% cat xab
dumpdates
fbtab
fstab
ftpusers
gettytab
gnats
group
host.conf
hosts
hosts.allow
hosts.equiv
hosts.lpd
inetd.conf
isdn
libmap.conf
-----------------------------------------------------------------

Espero te sirva.

Saludos,
Mauricio.

 --
MAURICIO HERRERA CUADRA
mauricio en arareko.net
http://www.arareko.net/


----- Original Message ----
Date: Wed, 30 Apr 2008 01:19:08 -0500 (CDT)
From: "Carmen Marcela Alegria C." <alegria071 en yahoo.com.mx>
Subject: [Perl] Leer contenido de un directorio y escribirlo en
    pequeños archivos
To: perl en tlali.iztacala.unam.mx
Message-ID: <605773.57096.qm en web38007.mail.mud.yahoo.com>
Content-Type: text/plain; charset=iso-8859-1

Hola Lista,

Tengo un directorio con un poco mas de 25 mil
archivos y es un poco complicado manejarlos. Por eso
quiero que los nombres de los archivos sean guardados
en archivos con X cantidad de lineas para procesar
dichas rutas despues.

A esta hora se me ocurrio asi, pero se que quiza no
es la mejor forma de hacerlo.


#!/usr/bin/perl -w

$c=1;
$i=0;

opendir(DIR, $ARGV[0]) or die "can't opendir
$ARGV[0]: $!";
while (defined($file = readdir(DIR))) {
  if ( $i > 15){
   $c++;
   $i=0;
  }
  open FH, ">>./arch-$c" || die " can't open file ";
  print FH "$file\n"; 
  close FH;
  $i++;
}
closedir(DIR);


Agradezco de antemano cualquier sugerencia para
mejorarlo.


Saludos,

Marcela Alegria



Más información sobre la lista de distribución Perl