Aquí iré apuntando las traperadas que hago para copiar archivos sobretodo en red.
- Copiar archivos por red de un host a otro, teniendo en un archivo la lista de nombres. En el destino se copiarán todos los archivos en un único directorio. Esto lo uso mucho en el trabajo. Por ejemplo:
cat fileNames.txt /copy/from/here/file1.txt /another/dir/file2.txt /file3.txt /home/user/file4.txt # in target host: cd /target/directory while [ 1 ]; do nc -l -p 1234|tar xvzf -; sleep 1; done # in source host: while read file; do cd `dirname $file`;tar cvzf - `basename $file` | netcat targetHost 1234; cd -; sleep 5; done <fileNames.txt
De esta manera se comprimen y se mandan por red los archivos. Que quede claro que los archivos van a parar todos a un directorio:
# in target host: cd /target/directory ls file1.txt file2.txt file3.txt file4.txt
así que más vale que no se repitan nombres de archivos…
- Copiar con cp y barra de progreso: http://www.quintoblog.com/2013/10/04/copiar-con-cp-y-barra-de-progreso/
- Copiar por red un árbol de directorios o múltiples archivos sueltos, con barra de progreso:
# in source host: SOURCE="myfile1 mypattern*.ext /my/dir/1" tar cvf - $SOURCE | pv -s `du $SOURCE -cs|tail -1|awk '{print $1}'`K | gzip - | nc -l 8000 # in target host/directory nc localhost 8000|gunzip -|tar xvf -Si se quiere quitar la barra de progreso o no se tiene el paquete ‘pv’:
# in source host: SOURCE="myfile1 mypattern*.ext /my/dir/1" tar cvzf - $SOURCE | nc -l 8000 # in target host/directory nc localhost 8000|tar xvzf -
- Igual que antes, pero comprobamos MD5:
# in source host: SOURCE="myfile1 mypattern*.ext /my/dir/1" tar cvf - $SOURCE 2>/tmp/listOfFiles.txt | pv -s `du $SOURCE -cs|tail -1|awk '{print $1}'`K | gzip - | nc -l 8000 # in target host/directory nc localhost 8000|tar xvzf - >/tmp/listOfFiles.txtEn «./listOfFiles.txt» tenemos la lista de archivos que se han copiado (en ambos equipos). Creamos un único md5 de todos los archivos:
# exec in source and target host while read file; do [[ -e $file && ! -d $file ]] && md5sum "$file"; done
Ambos valores deben coincidir. Si no coinciden pues ya investigamos en detalle
- Hacer un tar.gz con barra de progreso:
tar -cf - . | pv -s $(du -sb . | awk '{print $1}') | gzip > out.tgz
Copiar archivos: tips and tricks