How to copy only symbolic links through rsync
Solution 1
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.
Solution 2
You can generate a list of files excluding links with find input_dir -not -type l
, rsync has an option --exclude-from=exlude_file.txt
you can do it in two steps :
find input_dir -not -type l > /tmp/rsync-exclude.txt
rsync -uvrl --exclude-from=/tmp/rsync-exclude.txt input_dir output_dir
one line bash :
rsync -urvl --exclude-from=<(find input_dir -not -type l | sed 's/^..//') input_dir output_dir
Solution 3
You can do it more easily like:
find /path/to/dir/ -type l -exec rsync -avP {} ssh_server:/path/to/server/ \;
EDIT: If you want to copy symbolic links of the current directory only without making it recursive. You can do:
find /path/to/dir/ -maxdepth 1 -type l -exec rsync -avP {} ssh_server:/path/to/server/ \;
Related videos on Youtube
Newbiee
Updated on June 16, 2022Comments
-
Newbiee almost 2 years
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?
-
Dan over 6 yearsThis won't copy the symlinks as symlinks, though.
-
ghoti over 6 years@Dan ... Well,
-a
translates to-rlptgoD
, and-l
is documented to, "when symlinks are encountered, recreate the symlink on the destination." What results did you encounter? -
Dan over 6 yearsOh! I missed that -a includes -l!