lavv17 / lftp

sophisticated command line file transfer program (ftp, http, sftp, fish, torrent)
http://lftp.yar.ru
GNU General Public License v3.0
1.08k stars 159 forks source link

lftp mirror tries to delete directories it hasn't downloaded/emptied when using --Remove-source-dirs #645

Open garymoon opened 2 years ago

garymoon commented 2 years ago

Hi,

When attempting a mirror operation with a condition that skips some files (e.g. --older-than), combined with --Remove-source-dirs, it appears lftp attempts to delete directories that it hasn't mirrored content from due to that condition. I'm using v4.9.2 on Linux from homebrew.

My lftp command: lftp -e 'set mirror:no-empty-dirs 1; set net:timeout 30; set xfer:timeout 30; set sftp:connect-program "ssh -a -x -i ~/.ssh/key"; set mirror:sort-by date-desc; mirror -vvvv --Remove-source-dirs --older-than=now-1week --exclude-glob="watch/*" --exclude=".htaccess" "/remote_path/" "/local_path/"; exit' -u username, sftp://domain/

Example output:

Scanning directory `A'                                  
Scanning directory `A/A1'                                
Removing source directory `A/A1'                               
rmdir: Access failed: Failure (/path/A/A1)    
Scanning directory `A/A2'
Removing source directory `A/A2'                               
rmdir: Access failed: Failure (/path/A/A2)    
Scanning directory `A/A3'
Removing source directory `A/A3'                               
rmdir: Access failed: Failure (/path/A/A3)    
Scanning directory `A/A4'
Removing source directory `A/A4'                               
rmdir: Access failed: Failure (/path/A/A4)    
Removing source directory `A'
rmdir: Access failed: Failure (/path/A)    

Those directories are too new to be mirrored, and contain content, but lftp attempts to remove them anyway. Things work fine if --older-than is removed, though of course it downloads files newer than I want.

I've also tried variations with the following flags: --scan-all-first --depth-first --continue

Thank you for the wonder that is lftp! :blue_heart: