2012-03-19 33 views
6

¿Cómo copio solo enlaces simbólicos (y no el archivo al que apunta) u otros archivos usando rsync?Cómo copiar solo enlaces simbólicos a través de rsync

me trataron

rsync -uvrl input_dir output_dir

pero necesito copiar exclusivamente los enlaces simbólicos solamente?

¿Algún truco que incluya incluir opciones de exclusión?

Respuesta

6

Por this question+answer, puede crear una secuencia de comandos como un conducto. Las tuberías son una parte integral de la programación de shell y las secuencias de comandos shell.

find /path/to/files -type l -print | \ 
    rsync -av --files-from=- /path/to/files [email protected]:/path 

¿Qué está pasando aquí?

El comando find comienza en/path/to/files y realiza un paso recursivo por todo "debajo" de ese punto. Las opciones a find son condiciones que limitan lo que se obtiene con la opción -print. En este caso, solo las cosas de -type l (enlace simbólico, según man find) se imprimirán para encontrar la "salida estándar".

Estos archivos se convierten en la "entrada estándar" de la opción rsync del comando --file-from.

Dale una oportunidad. En realidad, no he probado esto, pero me parece que debería funcionar.

+0

gracias voy a darle una oportunidad .... – Newbiee

+0

esto no va a copiar los enlaces simbólicos como enlaces simbólicos, sin embargo. – Dan

+0

@Dan ... Bueno, '-a 'se traduce como' -rlptgoD', y '-l' está documentado como" cuando se encuentran enlaces simbólicos, recrea el enlace simbólico en el destino ". ¿Qué resultados encontraste? – ghoti

4

Puede generar una lista de archivos excluidos los vínculos con find input_dir -not -type l, rsync tiene una opción --exclude-from=exlude_file.txt

puede hacerlo en dos pasos:

find input_dir -not -type l > /tmp/rsync-exclude.txt

rsync -uvrl --exclude-from=/tmp/rsync-exclude.txt input_dir output_dir

una fiesta de línea :

rsync -urvl --exclude-from=<(find input_dir -not -type l | sed 's/^..//') input_dir output_dir

+0

gracias lo intentaré ... – Newbiee

1

Puede hacerlo más fácilmente como:

find /path/to/dir/ -type l -exec rsync -avP {} ssh_server:/path/to/server/ \; 

EDIT: Si desea copiar los enlaces simbólicos del directorio actual sólo sin por lo que es recursivo. Que puede hacer:

find /path/to/dir/ -maxdepth 1 -type l -exec rsync -avP {} ssh_server:/path/to/server/ \; 
Cuestiones relacionadas