linuxunixrsyncsymlink

How to copy only symbolic links through rsync


How do I copy symbolic links only (and not the file it points to) or other files using rsync?

I tried

rsync -uvrl input_dir output_dir

but I need to exclusively copy the symbolic links only ?

any trick using include exclude options?


Solution

  • Per this question+answer, you can script this as a pipe. Pipes are an integral part of shell programming and shell scripting.

    find /path/to/files -type l -print | \
      rsync -av --files-from=- /path/to/files user@targethost:/path
    

    What's going on here?

    The find command starts at /path/to/files and steps recursively through everything "under" that point. The options to find are conditions that limit what gets output by the -print option. In this case, only things of -type l (symbolic link, according to man find) will be printed to find's "standard output".

    These files become the "standard input" of the rsync command's --file-from option.

    Give it a shot. I haven't actually tested this, but it seems to me that it should work.