Página 1 de 1
Último nombre carpeta AIX
Publicado:
2012-07-26 12:39 @568
por jrubia2
Buen día a todos,
Soy nuevo en el mundo de Perl, y en este foro.
Tengo la siguiente cuestión: necesito realizar un script que me diga el nombre de la última carpeta de un directorio. En Linux "común y corriente" (ya les diré por qué hablo así) utilizo el comando:
ls -dlrt * | awk '/home/prueba { f=$NF }; END{ print f }'
Y el comando funciona bien; la idea es realizar un script que ejecute algunas instrucciones, la primera de las cuales es la indicada. Sin embargo, en AIX (la versión Linux de IBM) el comando no funciona. Estoy buscando alternativas y me parece que con Perl podría ser, pero como les digo, soy nuevo.
Agradezco su colaboración.
Juan Carlos
Re: Último nombre carpeta AIX
Publicado:
2012-07-26 14:03 @627
por explorer
Bienvenido a los foros de Perl en Español, jrubia2.
Lo que no queda claro es a qué te refieres con "último". ¿Tal cual está grabado en el disco? ¿Archivo más moderno? ¿Más antiguo?
No conozco AIX, así que habrá que andar a tientas... Tampoco sabemos qué versión de Perl estás usando.
Using perl Syntax Highlighting
#!/usr/bin/perl
opendir(DIR, '.');
while($archivo = readdir(DIR)) {
next if -d $archivo; # saltamos al siguiente si es un directorio
push @archivos, $archivo; # guardamos
}
closedir(DIR);
print "$archivos[-1]\n"; # pintamos el último
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Re: Último nombre carpeta Linux
Publicado:
2012-07-26 14:23 @641
por jrubia2
Hola Administrador,
Primero que todo, gracias por responder. Perl es un lenguaje que desconozco, pero que quiero conocer.
Respecto a su pregunta de "último", la idea es encontrar el nombre de la última carpeta creada cuyo nombre comience por una letra específica. Ejemplo: Si el directorio principal se llama "carpetas", dentro de él habrá otras sub-carpetas cuyos nombres son "carpeta1", "carpeta2", etc.
La idea es que el script me diga: "el nombre de la última carpeta CREADA, cuyo nombre comienza por las letras 'carpeta', es: 'carpeta3", por decir algo.
Agradezco su valiosa colaboración.
Juan Carlos
Re: Último nombre carpeta AIX
Publicado:
2012-07-26 15:12 @675
por explorer
Pero es que este es otro problema: búsqueda en profundidad dentro de subdirectorios.
¿Hasta que nivel de profundidad?
Si solo es una, podemos hacer una búsqueda de forma directa. Si hay que mirar a más profundidad, pues habrá que pensar en usar
File::Find.
Otra cosa.
AIX no es una versión Linux de IBM, sino una versión de UNIX de IBM
Re: Último nombre carpeta AIX
Publicado:
2012-07-26 15:48 @700
por jrubia2
Hola Administrador,
El nivel de profundidad no es necesario; con poder realizar la búsqueda sobre el mismo directorio donde voy a ejecutar el
script puede ser suficiente.
Y gracias por la aclaración de AIX, Unix, etc.
Re: Último nombre carpeta AIX
Publicado:
2012-07-26 17:29 @770
por explorer
Bueno, sería algo así:
Using perl Syntax Highlighting
#!/usr/bin/perl
use v5.10;
opendir(DIR, "."); # abrir directorio actual
while ($a = readdir DIR) { # para cada archivo del directorio
next if not -d $a; # pasamos al siguiente si no es un subdirectorio
next if not $a =~ /^carpeta/i; # pasamos al siguiente si no comienza por "carpeta"
push @a, [ $a, (stat $a)[10] ]; # encontrado un candidato.
# Con stat() sacamos los atributos de ese subdirectorio.
# El atributo número 10 es la fecha de creación.
# Creamos un array anónimo (con []) y metemos en él
# el nombre del subdirectorio y esa fecha de creación.
# Cada array anónimo lo vamos guardando en @a
}
closedir DIR;
@a = sort { $a->[1] <=> $b->[1] } @a; # Hacemos una ordenación numérica ascendente según
# el valor de la segunda componente de los array
# almacenados en @a.
# El resultado es la lista de los subdirectorios ordenados
# por su fecha de creación, en orden creciente.
# La nueva lista queda otra vez en @a.
#say $_->[0] for @a # Comprobación: salida de todos los encontrados
say $a[-1][0]; # Sacamos el nombre del subdirectorio que está en último lugar
# (el de fecha más reciente de creación)
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Naturalmente, depende de si en tu AIX tienes instalado un Perl v5.10 o más moderno.
Con este código te queda en @a la lista de carpetas, ordenado por fecha de creación.
Pero si, realmente, solo necesitas el nombre de una sola carpeta, te vale con algo más sencillo:
Using perl Syntax Highlighting
#!/usr/bin/perl
use v5.10;
my $max_fecha; # Almacena fecha y
my $max_nombre; # nombre de la carpeta que nos interesa
opendir(DIR, "."); # abrir directorio actual
while ($a = readdir DIR) { # para cada archivo del directorio
next if not -d $a; # pasamos al siguiente si no es un subdirectorio
next if not $a =~ /^carpeta/i; # pasamos al siguiente si no comienza por "carpeta"
my $edad = (stat $a)[10]; # Fecha de creación de $a
if ($max_fecha < $edad) { # Hemos encontrado una carpeta más joven
$max_fecha = $edad; # Recordaremos esa edad
$max_nombre = $a; # y su nombre
}
closedir DIR;
if ($max_nombre) {
say "Carpeta más joven: [$max_nombre]";
}
else {
say 'No encontré ninguna carpeta';
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Quizás el problema que veo es saber si en AIX tiene lo de "fecha de creación". Y que ese Perl sea capaz de leerlo.
Re: Último nombre carpeta AIX
Publicado:
2012-07-27 09:53 @453
por jrubia2
Hola, Administrador,
Tengo Perl 5.10.1 en AIX y CentOS, y 5.14.2 en Windows 7.
Estuve haciendo las pruebas correspondientes con el código enviado tanto en Windows 7 como en CentOS, y haciendo algún ajuste menor, puedo ver una carpeta, aunque no sea exactamente la última creada; trataré de resolver esto, antes de ver cómo será el tema en AIX, cuando tenga acceso remoto a dicha máquina.
Re: Último nombre carpeta AIX
Publicado:
2012-08-24 16:04 @711
por jrubia2
Hola Administrador,
Porque lo prometido es deuda, el script para AIX es:
@variable = system("cd '/home/usuario'; ls -d -t */ | head -1 ");
print @variable;
Agradezco la colaboración brindada.
Juan Carlos