it-swarm.dev

Linux equivalente a robocopy?

Es algo gracioso, hay muchas formas en que las herramientas de línea de comando de Linux son muy superiores a las de Windows, pero una cosa que no he encontrado un equivalente es robocopy . Robocopy es mucho más versátil que cp, y no puedo averiguar cómo hacer lo que quiero con las herramientas de Linux.

Un caso de uso específico es que tengo dos directorios con archivos en su mayoría similares, pero uno tiene archivos fuente más nuevos y otro tiene archivos de contenido que el otro directorio no tiene, y posiblemente archivos fuente más nuevos (para un sitio web). Quiero copiar los archivos del último directorio en el primero, agregar nuevos archivos de contenido y demás, pero no sobrescribir los archivos más nuevos en el directorio de destino.

Intenté averiguar cómo hacer esto en Linux durante aproximadamente media hora, decidí que probablemente tendría que aprender a bash scripting o algo para hacer lo que quisiera, y luego me di cuenta de que solo podía usar robocopy. También tenía algunos otros requisitos. Básicamente estaba convirtiendo un sitio web de Python (Django) de un repositorio SVN a un repositorio Git, y quería asegurarme de que no tenía cambios no confirmados en SVN. Sin embargo, quería excluir condicionalmente los directorios .svn y los archivos compilados .pyc compilados de Python. El siguiente comando robocopy hace exactamente lo que quiero:

robocopy source destination /XO /E /XD .svn /XF *.pyc

¿Hay algún equivalente a Robocopy en Linux? Busqué en rsync brevemente, pero parecía que tendría que configurar un servidor rsync antes de intentar sincronizar las carpetas.

31
Ibrahim

Suena como que rsync es definitivamente lo que buscas. No es necesario configurar un 'servidor rsync' para copiar archivos de una máquina a otra. Rsync admite la copia de archivos a través de SFTP (transferencia de archivos SSH) que la mayoría de las cajas de linux ya han habilitado (si no se han desactivado manualmente).

Consulte los archivos duplicados de Lifehacker en los sistemas con rsync para obtener más detalles:

Si desea realizar una copia de seguridad de sus datos, distribuir archivos de forma segura o reflejar sus documentos de trabajo a través de Internet desde la oficina a la casa, entre las computadoras de su red local o desde su computadora a su servidor web, rsync puede hacer el trabajo. Hoy usaremos rsync para duplicar carpetas entre una Mac y una PC a través de una conexión segura en la línea de comandos.

Rsync es gratuito (como en voz) y multiplataforma, lo que significa que sincroniza archivos entre sistemas operativos (Windows/Cygwin, Mac OS, Linux); funciona sobre ssh por lo que está cifrado y seguro; a diferencia de FTP, es incremental , por lo que solo las partes de los archivos modificados se transfieren, no archivos completos , lo que hace que funcione como Speedy Gonzalez; y el hecho de que su línea de comandos lo convierte en un script y se automatiza fácilmente.

38
Josh Hunt

rsync copiará los archivos de un directorio a otro en la misma máquina como robocopy. Aquí está el comando rsync que es equivalente a su comando robocopy:

rsync -auv --exclude '.svn' --exclude '*.pyc' source destination

Esto copiará recursivamente el origen al destino y excluirá los archivos más antiguos, así como los directorios/archivos '.svn' y '* .pyc'.

15
Sean Staats