Output of --list-only not as I expected for symlinks

Michael Hipp michael at redmule.com
Thu Sep 13 02:26:12 UTC 2018


My apologies. I'm evidently not communicating very well.

I am not asking for a list of what "needs to be transferred", I am 
looking for a list of those things that are "candidates to transfer". In 
other words, the source items minus exclusions/filters or anything else 
that will be ignored (by rsync).

Is there any option for rsync that offers such a list?

 > find /path -type f -or -type d -print  (or -ls)

This tells me nothing about what *rsync* expects to do. In particular it 
won't consider rsync's filters/exclusions.

Thanks,
Michael

On 2018-09-12 20:54, Kevin Korb via rsync wrote:
> How would it know what needs to be transferred without looking at both
> source and target?  You are correct that it doesn't pay any attention to
> the target because it doesn't need a target.  If the source is remote
> then it will connect to the remote to do a remote listing and if the
> source is local then no connection is needed but then neither is rsync.
> As far as obeying the recursive flag, so does ls.
> 
> I didn't know it cared about exclude rules but you are right that it
> does.  Guess I never tried.  I only ever used it when I was trying to
> see what was on an rsync server.
> 
> Anyway, if you want to list all the files and dirs but not symlinks and
> others in a local tree:
> find /path -type f -or -type d -print  (or -ls)
> 
> On 09/12/2018 07:53 PM, Michael Hipp via rsync wrote:
>> Thank you. But I'm afraid I don't understand. The man entry reads:
>>
>> "--list-only
>>      This option will cause the source files to be listed instead of
>> transferred. This option is inferred if there is a single source arg and
>> no destination specified..."
>>
>> It doesn't say anything about "list remote files". In fact I am not sure
>> why it would even contact the remote end. And the behavior does not
>> change even if no destination is specified.
>>
>> As far as it ignoring the rest of the command line, note that it does
>> obey exclusion rules. Symlinks seem to be the only anomaly in its output.
>>
>> I use --dry-run and --itemize-changes frequently. But I was trying to
>> find something that would give me a correct list of the candidate source
>> files but without having to make an expensive connect to the remote
>> server. Any suggestions?
>>
>> Thanks,
>> Michael Hipp
>>
>>
>>
>> On 2018-09-12 11:17, Kevin Korb via rsync wrote:
>>> --list-only is simply a way to list remote files when you only have
>>> access via rsync.  It ignores the rest of the command line.  You want
>>> --dry-run (--itemize-changes would be a good idea too).
>>>
>>> On 09/12/2018 11:06 AM, Michael Hipp via rsync wrote:
>>>> The output of --list-only isn't as I expected as regards symlinks. Here
>>>> are my test files:
>>>>
>>>> $ ls ./src
>>>> -rw-------  1 michael michael    0 2018-09-05 09:18:15 file
>>>> lrwxrwxrwx  1 michael michael    4 2018-09-05 09:18:28 near_symlink
>>>> -> file
>>>> lrwxrwxrwx  1 michael michael   23 2018-09-05 09:19:05 far_symlink ->
>>>> /home/michael/Documents
>>>>
>>>> The "destination" dir is empty:
>>>>
>>>> $ ls ./dest
>>>> drwxr-xr-x 31 michael michael 4.0K 2018-09-12 09:46:06 ..
>>>> drwx------  2 michael michael 4.0K 2018-09-12 09:50:20 .
>>>>
>>>> I want to know which files are candidates to transfer. I don't want
>>>> symlinks to transfer. So I run it with --list-only :
>>>>
>>>> $ rsync -r --no-links --list-only ./src/ ./dest
>>>> drwx------          4,096 2018/09/06 09:39:16 .
>>>> lrwxrwxrwx             23 2018/09/05 09:19:05 far_symlink
>>>> -rw-------              0 2018/09/05 09:18:15 file
>>>> lrwxrwxrwx              4 2018/09/05 09:18:28 near_symlink
>>>>
>>>> This seems to indicate the symlinks are expected to transfer. But if I
>>>> actually run the transfer by removing --list-only ...
>>>>
>>>> $ rsync -r --no-links ./src/ ./dest
>>>> skipping non-regular file "far_symlink"
>>>> skipping non-regular file "near_symlink"
>>>>
>>>> It does not transfer the symlinks and this is confirmed by the contents
>>>> of dest:
>>>>
>>>> $ ls ./dest
>>>> drwxr-xr-x 31 michael michael 4.0K 2018-09-12 09:46:06 ..
>>>> -rw-------  1 michael michael    0 2018-09-12 09:57:50 file
>>>> drwx------  2 michael michael 4.0K 2018-09-12 09:57:50 .
>>>>
>>>> So it seems like --list-only isn't being truthful as it surely knows
>>>> beforehand the symlinks will not be transferred regardless of the
>>>> condition of dest.
>>>>
>>>> What am I missing?
>>>>
>>>> Thanks,
>>>> Michael Hipp
>>>>
>>>>
>>>
>>>
>>
>>
> 
> 




More information about the rsync mailing list