¿Linux equivalente a robocopy?

34

Es un poco divertido, hay muchas maneras en que las herramientas de línea de comandos de Linux son muy superiores a las de Windows, pero una cosa que no he encontrado es equivalente a la robocopia . Robocopy es mucho más versátil que cp, y no puedo entender 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 uno 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, agregando nuevos archivos de contenido y demás, pero sin sobrescribir los archivos más nuevos en el directorio de destino.

Traté de descubrir cómo hacer esto en Linux durante aproximadamente media hora, decidí que probablemente tendría que aprender bash scripting o algo para hacer lo que quería, y luego me di cuenta de que podía usar robocopy. También tenía 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 no tener cambios no confirmados en SVN. Sin embargo, quería excluir condicionalmente los .svndirectorios y los .pycarchivos 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? Lo examiné rsyncbrevemente, pero parecía que tendría que configurar un servidor rsync antes de intentar sincronizar las carpetas.

Ibrahim
fuente
1
No necesita configurar un servidor rsync, rsync sobre ssh ejecuta automáticamente rsync en la máquina remota en modo servidor (de una manera que se usa solo para esa conexión, que se ejecuta bajo su propia cuenta y que se cierra automáticamente cuando se hace) .
CesarB
"... pero parecía que tendría que configurar un servidor rsync antes de intentar sincronizar las carpetas". He usado Rsync durante años y nunca he tenido que configurar un servidor Rsync formal. De hecho, muchas herramientas de sincronización / copia de seguridad en macOS usan Rsync como núcleo sin necesidad de configurar un servidor como Carbon Copy Cloner y, creo, ¡SuperDuper!
JakeGould

Respuestas:

38

Parece que rsync es definitivamente lo que buscas. No necesita configurar un 'servidor rsync' para copiar archivos de una máquina a otra. Rsync admite la copia de archivos a través de SFTP (SSH File Transfer) que la mayoría de las cajas de Linux ya han habilitado (si no está deshabilitado manualmente)

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

Ya sea que desee hacer 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 hasta el hogar, 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á encriptado y seguro; a diferencia del FTP, es incremental , por lo que solo se transfieren las partes de los archivos modificados , no los archivos completos , lo que hace que funcione como Speedy Gonzalez; y el hecho de que es línea de comandos lo hace programable y fácilmente automatizado.

Josh Hunt
fuente
Lea la página de manual de rsync - para usar ssh (sin un servidor rsync explícito) usará "-e ssh"
Doug Harris
1
rsync es asombroso! Y no necesita usar -e ya que cualquier ruta como [email protected]: / blah / lo usará automáticamente.
The How-To Geek
Mmm, eso es genial. Entonces, ¿puede usar una scpsintaxis básicamente similar para transferir a través de ssh? En realidad estaba tratando de transferir archivos en una máquina, pero es bueno saberlo.
Ibrahim el
1
Desafortunadamente, esta respuesta no es del todo correcta: si bien usa SSH, no usa SFTP. En cambio, se comunica con la instancia remota de rsync directamente usando el protocolo rsync.
Daniel B
15

rsync copiará archivos de un directorio a otro directorio 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'.

Sean Staats
fuente
Excepto que lo hará de una sola manera, lo que puede resultar en un rendimiento de más de 5 veces, dependiendo de la cantidad de indirección en su solución de almacenamiento.
Mikhail
Cuando un archivo se elimina de la fuente, no se sincroniza con el destino.
Jirong Hu