mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # function zfpcp {
 | |
| # ZFTP put as copy:  i.e. first arguments are remote, last is local.
 | |
| # Currently only supports
 | |
| #  zfcp lfile rfile
 | |
| # if there are two arguments, or the second one is . or .., or ends
 | |
| # with a slash
 | |
| # or
 | |
| #  zfcp lfile1 lfile2 lfile3 ... rdir
 | |
| # if there are more than two (because otherwise it doesn't
 | |
| # know if the last argument is a directory on the remote machine).
 | |
| # However, if the remote machine plays ball by telling us `Is a directory'
 | |
| # when we try to copy to a directory, zfpcp will then try to do the correct
 | |
| # thing.
 | |
| 
 | |
| emulate -L zsh
 | |
| 
 | |
| [[ $curcontext = :zf* ]] || local curcontext=:zfpcp
 | |
| local rem loc
 | |
| integer stat do_close
 | |
| 
 | |
| zfautocheck || return 1
 | |
| 
 | |
| if [[ $# -gt 2 || $2 = (.|..) || $2 = */ ]]; then
 | |
|   local dir=$argv[-1]
 | |
|   argv[-1]=
 | |
|   # zfcd directory hack to put the front back to ~
 | |
|   if [[ $dir = $HOME || $dir = $HOME/* ]]; then
 | |
|     dir="~${dir#$HOME}"
 | |
|   fi
 | |
|   [[ -n $dir && $dir != */ ]] || dir="$dir/"
 | |
|   for loc in $*; do
 | |
|     rem=$dir${loc:t}
 | |
|     zftp put $rem <$loc || stat=1
 | |
|   done
 | |
| else
 | |
|   if [[ $2 = $HOME || $2 = $HOME/* ]]; then
 | |
|     2="~${2#$HOME}"
 | |
|   fi
 | |
|   zftp put $2 <$1
 | |
|   stat=$?
 | |
|   if [[ stat -ne 0 && $ZFTP_CODE = 553 && $ZFTP_REPLY = *'Is a directory'* ]]
 | |
|   then
 | |
|        zftp put $2/$1:t <$1
 | |
|        stat=$?
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| (( $do_close )) && zfclose
 | |
| 
 | |
| return $stat
 | |
| # }
 |