• Publicidad

Buscar un archivo de Windows mediante un script

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

Buscar un archivo de Windows mediante un script

Notapor piero66 » 2008-10-28 11:37 @526

Hola, espero que me puedan ayudar... necesito por medio de un script buscar un archivo... pero este archivo se encuentra en una carpeta de Windows, y mi script lo quiero correr en Linux, porque ahí esta mi sistema... ¿cómo ven que se podrá hacer?

¡¡ Espero que alguien me pueda ayudar !!

¡¡ Gracias !!
piero66
Perlero nuevo
Perlero nuevo
 
Mensajes: 95
Registrado: 2008-05-22 12:00 @541

Publicidad

Notapor explorer » 2008-10-28 13:04 @586

Pues eso depende de dónde está conectado el disco duro con el fichero que quieres buscar.

Si está en el mismo ordenador, y solo está funcionando el Linux, entonces tienes que montar la partición Windows para que el sistema la reconozca. Una vez que el sistema de ficheros de Windows sea visible, podrás buscarlo como cualquier otro fichero.

Si el disco está en otro ordenador o está en el mismo pero en una máquina virtual, entonces una posibilidad es usar una conexión por la red de Windows, usando samba en Linux. En Perl puedes usar alguno de los módulos para el protocolo smb o que usen la librería libsamba.

Y si no es posible compartir los directorios, habrá que pensar en poner un servicio en la máquina Windows para que el Linux pueda entrar a buscar. Por ejemplo, un servidor de FTP.
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

Notapor piero66 » 2008-10-28 14:08 @630

¿Tendrás un ejemplo de esa librería libsamba que me pudieras facilitar?, porque en CPAN no encontré nada acerca de esa librería.
¡¡Gracias !!
piero66
Perlero nuevo
Perlero nuevo
 
Mensajes: 95
Registrado: 2008-05-22 12:00 @541

Notapor explorer » 2008-10-28 16:24 @725

Este programa lo hice hace unos años. El módulo que usé era el Filesys::SmbClientParser.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
#
# baja_fichero_smb.pl
#
# Joaquín Ferrero. LATUV
#
# Descripción:
#       Baja un fichero por smb y lo deja en directorio destino.
#       No se comprueba que el destino exista.
#
# Entradas:
#       Origen : smb://usuario:contraseña@host/directorios/fichero
#       Destino: directorio y fichero
#
# Parámetros:
#
#
# Salidas:
#
#
# Ejemplo:
#       baja_fichero_smb.pl smb://joaquin:ponzo@xpstore/almacen1/im ... 01/img.png imagen_actual.png
#
# Historial:
#       31-may-2005 : Versión inicial
#

use Filesys::SmbClientParser;

## Esperamos dos argumentos, o morimos en el intento
scalar @ARGV == 2
        or die "Uso: $0 <smb://user:pass\@host/dir/file> <dir destino/fichero>";

## Los leemos
my ($smb_url, $dir_destino) = @ARGV;

## Del primer argumento, extraemos todos sus componentes
my ($smb_user, $smb_pass, $smb_host, $smb_dirs, $smb_file)
    = $smb_url =~ m{^smb://(.+):(.+)@([^/]+)(/.+)/([^/]+)$};

## El recurso compartido en Windows está en la primera parte del path
my  $smb_share = (split '/',$smb_dirs)[1];

## Extraemos el resto del path, quitando el nombre del recurso compartido
($smb_dirs) = $smb_dirs =~ m{^/[^/]+(.+)?$};

## Nos conectamos
my $smb = new Filesys::SmbClientParser (
    undef,
    (
        user     => $smb_user ,
        password => $smb_pass ,
        host     => $smb_host ,
        share    => $smb_share,
    )
);

## No nos interesan los mensajes de depurado
$smb->Debug(0);

## Nos metemos dentro del path indicado
$smb->cd($smb_dirs);

## Copiamos el fichero remoto a nuestro sitio
$smb->get($smb_file, $dir_destino);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Para hacer funcionar este módulo, necesitas tener instalado el programa smbclient, del paquete samba.

Otro módulo puede ser Filesys::SmbClient (que es más moderno y recomendado. Mira su sección de ejemplos. Este módulo usa la librería libsmbclient.so), y App::Smbxfer (este no ha pasado de la primera versión).
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

Notapor piero66 » 2008-10-29 12:20 @556

Mira, ya instalé desde el CPAN y al correr un ejemplo me marcó este error:

Código: Seleccionar todo
fd is not of type SMBCFILEPtr at /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Filesys/SmbClient.pm line 356.


El archivo que ejecuté es este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -l
use POSIX;
use Filesys::SmbClient;

my $smb = new Filesys::SmbClient(
    username  => "ingresos",
    password  => "ingresos",
#   workgroup => "alian",
    debug     => 10);

# Read a file
my $fd = $smb->open("smb://192.1.47.105/logos/ajax/Libreria-ajax.js", '0666');
while (defined(my $l= $smb->read($fd,50))) {print $l; }
$smb->close(fd);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Qué podría ser?
piero66
Perlero nuevo
Perlero nuevo
 
Mensajes: 95
Registrado: 2008-05-22 12:00 @541

Notapor explorer » 2008-10-29 13:22 @598

Debes comprobar el valor de $fd para saber si has conseguido conectar. Si hay algún error, consulta el valor de la variable $!:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $fd = $smb->open("smb://192.1.47.105/logos/ajax/Libreria-ajax.js")
    or die "No puedo leer el fichero: $!\n";
Coloreado en 0.001 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

Notapor piero66 » 2008-10-29 15:57 @706

Ya, gracias, ya salió... solo tengo una duda más, el archivo lo ejecuto en el shell y antes de darme el mensaje que yo envío... de si encontró o no el archivo en el sistema me aparecen estos datos:

Código: Seleccionar todo
smt_wct=4
smb_vwv[ 0]=  255 (0xFF)
smb_vwv[ 1]=  426 (0x1AA)
smb_vwv[ 2]=    0 (0x0)
smb_vwv[ 3]=  243 (0xF3)
smb_bcc=383
[000] A1 81 F0 30 81 ED A0 03  0A 01 01 A1 0C 06 0A 2B  ...0.... .......+
[010] 06 01 04 01 82 37 02 02  0A A2 81 D7 04 81 D4 4E  .....7.. .......N
[020] 54 4C 4D 53 53 50 00 02  00 00 00 0C 00 0C 00 38  TLMSSP.. .......8
[030] 00 00 00 15 82 89 62 07  4E 02 3D FB 1D C2 D2 00  ......b. N.=.....
[040] 00 00 00 00 00 00 00 90  00 90 00 44 00 00 00 05  ........ ...D....
[050] 02 CE 0E 00 00 00 0F 4C  00 45 00 4F 00 4E 00 41  .......L .E.O.N.A
[060] 00 44 00 02 00 0C 00 4C  00 45 00 4F 00 4E 00 41  .D.....L .E.O.N.A
[070] 00 44 00 01 00 0E 00 53  00 44 00 53 00 2D 00 53  .D.....S .D.S.-.S
[080] 00 52 00 56 00 04 00 1A  00 6C 00 65 00 6F 00 6E  .R.V.... .l.e.o.n
[090] 00 61 00 64 00 2E 00 67  00 6F 00 62 00 2E 00 6D  .a.d...g .o.b...m
[0A0] 00 78 00 03 00 2A 00 73  00 64 00 73 00 2D 00 73  .x...*.s .d.s.-.s
[0B0] 00 72 00 76 00 2E 00 6C  00 65 00 6F 00 6E 00 61  .r.v...l .e.o.n.a
[0C0] 00 64 00 2E 00 67 00 6F  00 62 00 2E 00 6D 00 78  .d...g.o .b...m.x
[0D0] 00 05 00 1A 00 6C 00 65  00 6F 00 6E 00 61 00 64  .....l.e .o.n.a.d
[0E0] 00 2E 00 67 00 6F 00 62  00 2E 00 6D 00 78 00 00  ...g.o.b ...m.x..
[0F0] 00 00 00 57 00 69 00 6E  00 64 00 6F 00 77 00 73  ...W.i.n .d.o.w.s
[100] 00 20 00 53 00 65 00 72  00 76 00 65 00 72 00 20  . .S.e.r .v.e.r.
[110] 00 32 00 30 00 30 00 33  00 20 00 52 00 32 00 20  .2.0.0.3 . .R.2.
[120] 00 33 00 37 00 39 00 30  00 20 00 53 00 65 00 72  .3.7.9.0 . .S.e.r
[130] 00 76 00 69 00 63 00 65  00 20 00 50 00 61 00 63  .v.i.c.e . .P.a.c
[140] 00 6B 00 20 00 32 00 00  00 57 00 69 00 6E 00 64  .k. .2.. .W.i.n.d
[150] 00 6F 00 77 00 73 00 20  00 53 00 65 00 72 00 76  .o.w.s.  .S.e.r.v
[160] 00 65 00 72 00 20 00 32  00 30 00 30 00 33 00 20  .e.r. .2 .0.0.3.
[170] 00 52 00 32 00 20 00 35  00 2E 00 32 00 00 00     .R.2. .5 ...2...
Got challenge flags:
Got NTLMSSP neg_flags=0x62898215
  NTLMSSP_NEGOTIATE_UNICODE
  NTLMSSP_REQUEST_TARGET
  NTLMSSP_NEGOTIATE_SIGN
  NTLMSSP_NEGOTIATE_NTLM
  NTLMSSP_NEGOTIATE_ALWAYS_SIGN
  NTLMSSP_NEGOTIATE_NTLM2
  NTLMSSP_CHAL_TARGET_INFO
  NTLMSSP_NEGOTIATE_128
  NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP: Set final flags:
Got NTLMSSP neg_flags=0x60088215
  NTLMSSP_NEGOTIATE_UNICODE
  NTLMSSP_REQUEST_TARGET
  NTLMSSP_NEGOTIATE_SIGN
  NTLMSSP_NEGOTIATE_NTLM
  NTLMSSP_NEGOTIATE_ALWAYS_SIGN
  NTLMSSP_NEGOTIATE_NTLM2
  NTLMSSP_NEGOTIATE_128
  NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP challenge set by NTLM2
challenge is:
[000] 30 27 71 88 B5 A0 56 6C                           0'q...Vl
NTLMSSP Sign/Seal - Initialising with flags:
Got NTLMSSP neg_flags=0x60088215
  NTLMSSP_NEGOTIATE_UNICODE
  NTLMSSP_REQUEST_TARGET
  NTLMSSP_NEGOTIATE_SIGN
  NTLMSSP_NEGOTIATE_NTLM
  NTLMSSP_NEGOTIATE_ALWAYS_SIGN
  NTLMSSP_NEGOTIATE_NTLM2
  NTLMSSP_NEGOTIATE_128
  NTLMSSP_NEGOTIATE_KEY_EXCH
write_socket(4,278)
write_socket(4,278) wrote 278
got smb length of 192
size=192
smb_com=0x73
smb_rcls=0
smb_reh=0
smb_err=0
smb_flg=136
smb_flg2=51205
smb_tid=0
smb_pid=9453
smb_uid=6146
smb_mid=3
smt_wct=4
smb_vwv[ 0]=  255 (0xFF)
smb_vwv[ 1]=  192 (0xC0)
smb_vwv[ 2]=    0 (0x0)
smb_vwv[ 3]=    9 (0x9)
smb_bcc=149
[000] A1 07 30 05 A0 03 0A 01  00 57 00 69 00 6E 00 64  ..0..... .W.i.n.d
[010] 00 6F 00 77 00 73 00 20  00 53 00 65 00 72 00 76  .o.w.s.  .S.e.r.v
[020] 00 65 00 72 00 20 00 32  00 30 00 30 00 33 00 20  .e.r. .2 .0.0.3.
[030] 00 52 00 32 00 20 00 33  00 37 00 39 00 30 00 20  .R.2. .3 .7.9.0.
[040] 00 53 00 65 00 72 00 76  00 69 00 63 00 65 00 20  .S.e.r.v .i.c.e.
[050] 00 50 00 61 00 63 00 6B  00 20 00 32 00 00 00 57  .P.a.c.k . .2...W
[060] 00 69 00 6E 00 64 00 6F  00 77 00 73 00 20 00 53  .i.n.d.o .w.s. .S
[070] 00 65 00 72 00 76 00 65  00 72 00 20 00 32 00 30  .e.r.v.e .r. .2.0
[080] 00 30 00 33 00 20 00 52  00 32 00 20 00 35 00 2E  .0.3. .R .2. .5..
[090] 00 32 00 00 00                                    .2...
size=192
smb_com=0x73
smb_rcls=0
smb_reh=0
smb_err=0
smb_flg=136
smb_flg2=51205
smb_tid=0
smb_pid=9453
smb_uid=6146
smb_mid=3
smt_wct=4
smb_vwv[ 0]=  255 (0xFF)
smb_vwv[ 1]=  192 (0xC0)
smb_vwv[ 2]=    0 (0x0)
smb_vwv[ 3]=    9 (0x9)
smb_bcc=149
[000] A1 07 30 05 A0 03 0A 01  00 57 00 69 00 6E 00 64  ..0..... .W.i.n.d
[010] 00 6F 00 77 00 73 00 20  00 53 00 65 00 72 00 76  .o.w.s.  .S.e.r.v
[020] 00 65 00 72 00 20 00 32  00 30 00 30 00 33 00 20  .e.r. .2 .0.0.3.
[030] 00 52 00 32 00 20 00 33  00 37 00 39 00 30 00 20  .R.2. .3 .7.9.0.
[040] 00 53 00 65 00 72 00 76  00 69 00 63 00 65 00 20  .S.e.r.v .i.c.e.
[050] 00 50 00 61 00 63 00 6B  00 20 00 32 00 00 00 57  .P.a.c.k . .2...W
[060] 00 69 00 6E 00 64 00 6F  00 77 00 73 00 20 00 53  .i.n.d.o .w.s. .S
[070] 00 65 00 72 00 76 00 65  00 72 00 20 00 32 00 30  .e.r.v.e .r. .2.0
[080] 00 30 00 33 00 20 00 52  00 32 00 20 00 35 00 2E  .0.3. .R .2. .5..
[090] 00 32 00 00 00                                    .2...
Mandatory SMB signing enabled!
SMB signing enabled!
cli_simple_set_signing: user_session_key
[000] 5D 00 BE 44 59 E7 DF AE  92 28 9D 43 D5 4C F2 1B  ]..DY... .(.C.L..
cli_simple_set_signing: NULL response_data
simple_packet_signature: sequence number 0
client_sign_outgoing_message: sent SMB signature of
[000] CF E8 15 23 9B 16 1D 87                           ...#....
store_sequence_for_reply: stored seq = 1 mid = 3
get_sequence_for_reply: found seq = 1 mid = 3
simple_packet_signature: sequence number 1
client_check_incoming_message: seq 1: got good SMB signature of
[000] 0A 43 BA 4C C3 1F 38 6A                           .C.L..8j
 session setup ok
simple_packet_signature: sequence number 2
client_sign_outgoing_message: sent SMB signature of
[000] 1F 3C 9D 79 F8 CF 25 10                           .<.y..%.
store_sequence_for_reply: stored seq = 3 mid = 4
write_socket(4,106)
write_socket(4,106) wrote 106
got smb length of 62
size=62
smb_com=0x75
smb_rcls=0
smb_reh=0
smb_err=0
smb_flg=136
smb_flg2=51205
smb_tid=12288
smb_pid=9453
smb_uid=6146
smb_mid=4
smt_wct=7
smb_vwv[ 0]=  255 (0xFF)
smb_vwv[ 1]=   62 (0x3E)
smb_vwv[ 2]=    1 (0x1)
smb_vwv[ 3]=  511 (0x1FF)
smb_vwv[ 4]=   31 (0x1F)
smb_vwv[ 5]=    0 (0x0)
smb_vwv[ 6]=    0 (0x0)
smb_bcc=13
[000] 41 3A 00 4E 00 54 00 46  00 53 00 00 00           A:.N.T.F .S...
get_sequence_for_reply: found seq = 3 mid = 4
simple_packet_signature: sequence number 3
client_check_incoming_message: seq 3: got good SMB signature of
[000] 64 3C 92 BD FE EC 9F 3D                           d<.....=
 tconx ok
Server connect ok: //192.1.47.104/Transferir: 0x190b7f00
smbc_getatr: sending qpathinfo
size=110
smb_com=0x32
smb_rcls=0
smb_reh=0
smb_err=0
smb_flg=8
smb_flg2=51201
smb_tid=12288
smb_pid=9453
smb_uid=6146
smb_mid=5
smt_wct=15
smb_vwv[ 0]=   42 (0x2A)
smb_vwv[ 1]=    0 (0x0)
smb_vwv[ 2]=   10 (0xA)
smb_vwv[ 3]=16644 (0x4104)
smb_vwv[ 4]=    0 (0x0)
smb_vwv[ 5]=    0 (0x0)
smb_vwv[ 6]=    0 (0x0)
smb_vwv[ 7]=    0 (0x0)
smb_vwv[ 8]=    0 (0x0)
smb_vwv[ 9]=   42 (0x2A)
smb_vwv[10]=   68 (0x44)
smb_vwv[11]=    0 (0x0)
smb_vwv[12]=  110 (0x6E)
smb_vwv[13]=    1 (0x1)
smb_vwv[14]=    5 (0x5)
smb_bcc=45
[000] 00 44 20 07 01 00 00 00  00 5C 00 43 00 4F 00 43  .D ..... .\.C.O.C
[010] 00 4F 00 5C 00 70 00 72  00 75 00 65 00 62 00 61  .O.\.p.r .u.e.b.a
[020] 00 31 00 2E 00 74 00 69  00 66 00 00 00           .1...t.i .f...
simple_packet_signature: sequence number 4
client_sign_outgoing_message: sent SMB signature of
[000] CE 72 E7 BF A9 A4 8F 30                           .r.....0
store_sequence_for_reply: stored seq = 5 mid = 5
write_socket(4,114)
write_socket(4,114) wrote 114
got smb length of 35
size=35
smb_com=0x32
smb_rcls=52
smb_reh=0
smb_err=49152
smb_flg=136
smb_flg2=51205
smb_tid=12288
smb_pid=9453
smb_uid=6146
smb_mid=5
smt_wct=0
smb_bcc=0
get_sequence_for_reply: found seq = 5 mid = 5
simple_packet_signature: sequence number 5
client_check_incoming_message: seq 5: got good SMB signature of
[000] 98 D2 47 62 BD CC 4D 63                           ..Gb..Mc
size=35
smb_com=0x32
smb_rcls=52
smb_reh=0
smb_err=49152
smb_flg=136
smb_flg2=51205
smb_tid=12288
smb_pid=9453
smb_uid=6146
smb_mid=5
smt_wct=0
smb_bcc=0
get_sequence_for_reply: found seq = 5 mid = 5
cli_errno_from_nt: 32 bit codes: code=c0000034
smbc errno NT_STATUS_OBJECT_NAME_NOT_FOUND -> 2

Error in stat:No existe el fichero o el directorio


Al final aperece el mensaje del script...

Espero me contestes esta última... ¡¡ Gracias !!
piero66
Perlero nuevo
Perlero nuevo
 
Mensajes: 95
Registrado: 2008-05-22 12:00 @541

Notapor explorer » 2008-10-29 17:49 @784

Todo eso que sale es debido al nivel de debug que pusiste en el new(). Lo principal es el mensaje de error: no encuentra el fichero que le has indicado: no encuentra \COCO\prueba1.tif.

Prueba a cambiar los '\' por '/'.

El esquema es: smb://servidor/recurso compartido/directorio/fichero.
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 28 invitados

cron