• Publicidad

Recorrer un directorio y eliminar un archivo

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

Recorrer un directorio y eliminar un archivo

Notapor pablgonz » 2013-11-29 22:47 @991

Hola a todos, estoy terminando de escribir un script y me he topado con el siguiente problema: en uno de los directorios donde necesito ejecutar una llamada al sistema, tengo un archivo extra y deseo eliminarlo: sé que siempre es el último y los archivos están numerados 1, 2, 3..., n, algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. fig-1.pdf,fig-2.pdf,fig-3.pdf,fig-4.pdf,fig-5.pdf 

¿Cómo recorro el directorio para eliminar solo el último de los archivos?

De antemano, muchas gracias.
Pablo
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Publicidad

Re: Recorrer un directorio y eliminar un archivo

Notapor explorer » 2013-11-30 10:28 @478

Puedes probar a hacer un contador, y así sabes cuál es el último.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $i = 1;
  2.  
  3. while (-e "fig-${i}.pdf") {     # mientras exista un archivo con ese índice
  4.     $i++;                       # pasamos al siguiente
  5. }                               # hasta que encontremos uno que no
  6.  
  7. $i--;                           # vamos al anterior que sabemos que existe
  8.  
  9. unlink "fig-${i}.pdf";          # y lo borramos
Coloreado en 0.003 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: 14485
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Recorrer un directorio y eliminar un archivo

Notapor pablgonz » 2013-12-02 22:37 @984

Muchísimas gracias, lo había logrado, pero tu solución es más corta.
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Re: Recorrer un directorio y eliminar un archivo

Notapor Aceitunas » 2013-12-04 05:20 @263

Una pregunta... no entiendo cómo se usa ${i}, yo habría hecho esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     my $i = 1;
  2.      
  3.     while (-e "fig-". i . ".pdf") {     # mientras exista un archivo con ese índice
  4.         $i++;                       # pasamos al siguiente
  5.     }                               # hasta que encontremos uno que no
  6.      
  7.     $i--;                           # vamos al anterior que sabemos que existe
  8.      
  9.     unlink "fig-${i}.pdf";          # y lo borramos
  10.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Me puede alguien explicar qué significan las llaves detrás del '$'? Quiero entender que el $ toma el carácter que va en la variable de dentro de las llaves pero no sé si es así...
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: Recorrer un directorio y eliminar un archivo

Notapor explorer » 2013-12-04 08:08 @380

Tu solución no funcionará porque le falta '$' delante de la 'i'.

Aparte de eso, el uso de las llaves en forma de '${i}' es porque lo que rodea a la variable $i puede afectar a su nombre con lo que Perl podría confundirse.

Un ejemplo más claro. Si pongo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $precio = 15;
  2. my $var = "Coste: $precio_euros";
  3. say $var;     # quiero que salga en pantalla "Coste 15_euros"
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Si ejecuto estas líneas, sale
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Coste:
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
que no es lo que esperaba. Si le pongo "use strict;" al principio del programa, sale este error:
Global symbol "$precio_euros" requires explicit package name at ./kk.pl line 21.
Execution of ./kk.pl aborted due to compilation errors.

y ya vemos lo que pasa: que Perl se ha creído que la variable que hemos escrito es '$precio_euros'. Y no es eso lo que queremos.

Es obvio que esto sí funcionará:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $var = "Coste: $precio euros";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
porque '$precio' está separado de lo que le sigue por un espacio en blanco. Pero, ¿qué ocurre si lo que queremos es que nuestra variable salga como antes, unida a algo que le sigue?
La forma tradicional es la que has comentado antes:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $var = "Coste: " . $precio . "_euros";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y funciona... pero... es largo, y son dos operaciones de concatenación, cuando solo queremos una simple interpolación de una variable.
También se podría hacer con sprintf, desde luego:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $var = sprintf "Coste: %s_euros", $precio;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
pero... sigue quedando largo :)
Entonces, necesitamos separar la variable '$precio' de lo que le sigue. Y ahí es donde aparecen las llaves:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $var = "Coste: ${precio}_euros";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Más información en tu propio ordenador en perldoc perldata, y en la Web (traducido al español), en la sección Constructores de valores escalares, al final.

P.D.: en el ejercicio, lo que sigue a '$i' es un punto, que no afectaría al nombre de la variable, así que, realmente, las llaves sobran. Pero decidí ponerlas porque así me aseguraba por si en el futuro las condiciones cambiaban. Ejemplo: $archivo = "${dia}_${mes}_${year}_001.pdf";
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14485
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Recorrer un directorio y eliminar un archivo

Notapor Aceitunas » 2013-12-04 10:39 @486

¡Muchas gracias!
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.


Volver a Administración

¿Quién está conectado?

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