• Publicidad

Quitarle caracteres a los nombres de los archivos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Quitarle caracteres a los nombres de los archivos

Notapor punkscp » 2010-10-22 14:56 @664

Saludos cordiales.

Espero me puedan ayudar con este problemita que traigo:

He intentado hacer un script el cual me renombre varios archivos .XML, el cual el nombre de uno de los archivos es TCH850701RM1_FE38530.XML, quiero quitar TCH850701RM1_ y debe quedar con el nombre: FE38530.XML.

¡De antemano les agradezco la atención brindada!
punkscp
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2010-05-06 23:26 @018

Publicidad

Re: Quitarle caracteres a los nombres de los archivos

Notapor explorer » 2010-10-22 15:35 @691

No nos dices qué es lo que tiene de particular la primera parte con respecto a la segunda.

Supongamos que lo que queremos es quitar la primera parte, hasta el guión bajo incluido.

Bueno, para ese tipo de operaciones se puede usar una expresión regular:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $nombre_fichero = 'TCH850701RM1_FE38530.XML';

$nombre_fichero =~ s/^\w+_//;    # sustituimos los primeros (^) caracteres alfanuméricos (\w+)
                                 # seguidos por un '_', por nada (es decir, los quitamos)

print "$nombre_fichero\n";
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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Quitarle caracteres a los nombres de los archivos

Notapor wanako » 2010-10-22 16:50 @743

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2.  
  3. my $name = 'TCH850701RM1_FE38530.XML';
  4. $name =~ /_/;
  5. my $newname = $';
  6. if ( -e -w $name ) {
  7.         rename $name, $newname || die "Ouch!... Win32?...";
  8.         print "$name -> [$newname]\n";
  9. } else { die "No encuentro $name..."; }
  10.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
wanako
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2010-09-23 11:27 @519

Re: Quitarle caracteres a los nombres de los archivos

Notapor punkscp » 2010-11-04 18:45 @823

Saludos cordiales,

Muchas gracias por la ayuda,

Pero ahora la pregunta ¿y si son varios archivos .XML? Porque ahí es como si lo estuviera haciendo manual, archivo por archivo, lo que se pretende es quitar los primeros 13 caracteres del nombre de varios archivos con extensión .XML ubicados en la carpeta donde se ejecute el script.

Por ejemplo, en bash en Linux el código es fácil:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
#!/bin/bash
echo *.XML | cut -b14-29 > XML.txt
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


pero como es para Windows, ahí sí ando perdido un poco.

Si de favor me pudieran ayudar, ¡¡gracias!!
punkscp
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2010-05-06 23:26 @018

Re: Quitarle caracteres a los nombres de los archivos

Notapor explorer » 2010-11-04 19:11 @841

Pero es que no sabíamos que no sabías hacer un bucle por todos los ficheros .XML.

Además, vemos ahora que los nombres se pueden recortar en sus primeros 14 caracteres, así que no hace falta expresiones regulares... con substr() nos vale para recortar los nombres.

Y además, es una tarea tan sencilla que queremos ejecutarla desde la línea de comandos, como si fuera un guión bash.

Con el siguiente programa, se puede conseguir:

perl -e "for (<*.XML>) { rename $_, substr $_, 13 }"

Observa que las comillas son dobles, porque dices que estás en Windows. Si estuvieras en Linux/Unix, debes usar entrecomillado simple.

Como ya no uso Windows, no sé si el <*.XML> funcionará igual que en mi Linux. Si no te funciona, prueba con esta variante:

perl -e "for (@ARGV) { rename $_, substr $_, 13 }" *.XML

¡Ojo!, estos programas renombran directamente. Si quieres hacer lo mismo que el guión bash, sería

perl -le "for (<*.XML>) { print substr $_, 13 }" > XML.txt
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


Volver a Básico

¿Quién está conectado?

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