Buscador

martes, 22 de enero de 2013

Y seguimos con "xcopy"

Hola.

En la anterior entrada trataba la copia de ficheros con el comando xcopy y sus ventajas respecto al "Copiar y Pegar" desde el explorador de Windows.

Incluso podíamos continuar la copia de ficheros después de una interrupción inesperada.

Ahora bien, en algunos casos nos vendría de perlas tener a mano el nombre de los ficheros que se van a copiar, los que se han copiado y los que están pendientes de copiar.

Voy a empezar por lo más fácil.



Obtener un listado de todos los ficheros que queremos copiar.


De nuevo xcopy tienen un parámetro para ello, (/L).
Un ejemplo;
xcopy /E /L I:\roms G:\roms >listado.txt

Con esto obtendremos un fichero llamado "listado.txt" con el nombre de los ficheros existentes en el origen y su path completo.

Al incluir el parámetro "/L" en el comando "xcopy" no realiza copia alguna.

¿Y para saber los ficheros copiados?


Muy simple, usamos de nuevo el operador ">" "nombre_de_fichero.txt"
Por ejemplo;
xcopy /Y /E /V /C I:\roms G:\roms >copiados.txt

Lo que hemos hecho es volcar "la salida estándar" al fichero "copiados.txt"
La salida estándar por defecto es la pantalla, lo que hacemos con el operador ">" es redirigirla a un fichero de texto.

La línea de comandos de MSDOS o Windows es bastante más pobre que la de UNIX pero eso no significa que no valga para nada. Algunas cosillas tiene como estamos viendo.

¿Y los que no se han copiado?

A pesar de que estamos utilizando el parámetro "/C"; "continuar copiando aunque se produzca un error", no quiere decir que copie el fichero a pesar de estar corrupto por ejemplo.
No lo copia y continúa con el siguiente.

Algo sobre la salida estándar (STDOUT) y la salida de errores (STDERR)

Cuando se produce un error no se envía directamente a la salida estándar si no a la salida de errores.
En la shell de Windows cuando ejecutamos un comando y nos da un error este aparece en pantalla, pero cuando hacemos un volcado a un fichero tal y como lo hemos hecho en el anterior ejemplo, no se verá reflejado.
¿Por qué? Porque no se envía directamente a la salida estándar. La shell en modo interactivo redirecciona la salida de error a la salida estándar.

Para poder capturar los errores utilizamos el operador "2>".
El operador ">" es lo mismo que "1>", que es la salida estándar, es decir, cuando todo va bien.
Y cuando algo va mal, un error, lo enviamos por "2>".

Aplicando esto:

xcopy /Y /E /V /C I:\roms G:\roms >copiados.txt 2>errores.txt 

Si la copia va bien se creará un único fichero llamado "copiados.txt" pero si alguno ha fallado además creará otro fichero, "errores.txt", en el que veremos los errores producidos durante la copia.

Como se puede observar la línea de ejecución, es decir; el comando, sus parámetros y la redirección de las salidas a distintos ficheros es bastante engorrosa en comparación con "Copia y Pegar".
Pero podemos hacer algo para al menos no tener que recordar todos los parámetros, operadores, etc.

Crear un script

Efectivamente, un script de shell. Que no es ni más ni menos que un fichero en el que se van ejecutando los comandos en el orden en el que están escritos.

¿Un script de una línea? ¿Por qué no?

Abrimos el bloc de notas, con chulería, si estamos en la línea de comandos "C:\notepad&" ;)
Y copiamos en él:
xcopy /Y /E /V /C ORIGEN DESTINO >copiados.txt 2>errores.txt

Y lo guardamos en el escritorio por ejemplo, como "copypaste.cmd"

De este modo cuando queramos copiar un buen número de ficheros y tener un mayor control sobre ellos tan sólo tendremos que editarlo indicando ORIGEN y DESTINO, lo guardamos y "Doble click"

Hay formas más elegantes de hacer esto mismo, ya las veremos.

Aclaración

Esta forma de copiar ficheros es la heredada de las últimas versiones de MSDOS, a diferencia del comando "copy" que lleva desde los inicios de los ordenadores tal y como los conocemos ahora.
Existen herramientas externas, que no pertenecen al sistema operativo, como bien comentaba un lector en la anterior entrada.
Sin embargo a mi al menos, no me deja de parecer curioso que estos comandos sigan siendo tan útiles hoy como hace 20 años.

[EOF]

3 comentarios:

Atomo Sato dijo...

Las 'salidas' y el dichoso '&',,, Lo dicho, me estoy volviendo un comodón,,,

Anaxagoras dijo...

Si es que yo soy un romántico. :)

Atomo Sato dijo...

Bueno, es otra forma de verlo,,, pero yo apuesto más a que me estoy acomodando en esto de la informática :(