• Publicidad

Último nombre carpeta AIX

¿Eres administrador de sistemas? Este foro es para todos aquellos temas relacionados con el uso de Perl para administración de sistemas.

Último nombre carpeta AIX

Notapor jrubia2 » 2012-07-26 12:39 @568

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
jrubia2
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2012-07-26 12:29 @562

Publicidad

Re: Último nombre carpeta AIX

Notapor explorer » 2012-07-26 14:03 @627

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.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. opendir(DIR, '.');
  4. while($archivo = readdir(DIR)) {
  5.     next if -d $archivo;               # saltamos al siguiente si es un directorio
  6.     push @archivos, $archivo;          # guardamos
  7. }
  8. closedir(DIR);
  9.  
  10. print "$archivos[-1]\n";               # pintamos el último
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Último nombre carpeta Linux

Notapor jrubia2 » 2012-07-26 14:23 @641

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
jrubia2
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2012-07-26 12:29 @562

Re: Último nombre carpeta AIX

Notapor explorer » 2012-07-26 15:12 @675

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 :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Último nombre carpeta AIX

Notapor jrubia2 » 2012-07-26 15:48 @700

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. :)
jrubia2
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2012-07-26 12:29 @562

Re: Último nombre carpeta AIX

Notapor explorer » 2012-07-26 17:29 @770

Bueno, sería algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.10;
  3.  
  4. opendir(DIR, ".");                   # abrir directorio actual
  5. while ($a = readdir DIR) {           # para cada archivo del directorio
  6.     next if not -d $a;               # pasamos al siguiente si no es un subdirectorio
  7.     next if not $a =~ /^carpeta/i;   # pasamos al siguiente si no comienza por "carpeta"
  8.     push @a, [ $a, (stat $a)[10] ];  # encontrado un candidato.
  9.                                      # Con stat() sacamos los atributos de ese subdirectorio.
  10.                                      # El atributo número 10 es la fecha de creación.
  11.                                      # Creamos un array anónimo (con []) y metemos en él
  12.                                      # el nombre del subdirectorio y esa fecha de creación.
  13.                                      # Cada array anónimo lo vamos guardando en @a
  14. }
  15. closedir DIR;
  16.  
  17. @a = sort { $a->[1] <=> $b->[1] } @a;    # Hacemos una ordenación numérica ascendente según
  18.                                          # el valor de la segunda componente de los array
  19.                                          # almacenados en @a.
  20.                                          # El resultado es la lista de los subdirectorios ordenados
  21.                                          # por su fecha de creación, en orden creciente.
  22.                                          # La nueva lista queda otra vez en @a.
  23.  
  24. #say $_->[0] for @a                      # Comprobación: salida de todos los encontrados
  25.  
  26. say $a[-1][0];                           # Sacamos el nombre del subdirectorio que está en último lugar
  27.                                          # (el de fecha más reciente de creación)
Coloreado en 0.001 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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.10;
  3.  
  4. my $max_fecha;                       # Almacena fecha y
  5. my $max_nombre;                      # nombre de la carpeta que nos interesa
  6.  
  7. opendir(DIR, ".");                   # abrir directorio actual
  8. while ($a = readdir DIR) {           # para cada archivo del directorio
  9.     next if not -d $a;               # pasamos al siguiente si no es un subdirectorio
  10.     next if not $a =~ /^carpeta/i;   # pasamos al siguiente si no comienza por "carpeta"
  11.  
  12.     my $edad = (stat $a)[10];        # Fecha de creación de $a
  13.  
  14.     if ($max_fecha < $edad) {        # Hemos encontrado una carpeta más joven
  15.         $max_fecha = $edad;          # Recordaremos esa edad
  16.         $max_nombre = $a;            # y su nombre
  17. }
  18. closedir DIR;
  19.  
  20. if ($max_nombre) {
  21.     say "Carpeta más joven: [$max_nombre]";
  22. }
  23. else {
  24.     say 'No encontré ninguna carpeta';
  25. }
  26.  
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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Último nombre carpeta AIX

Notapor jrubia2 » 2012-07-27 09:53 @453

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.
jrubia2
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2012-07-26 12:29 @562

Re: Último nombre carpeta AIX

Notapor jrubia2 » 2012-08-24 16:04 @711

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 :D
jrubia2
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2012-07-26 12:29 @562


Volver a Administración

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados