[ftputil] mirror script + listing files with dot inside
Benjamin Sergeant
bsergean at gmail.com
Wed Dec 27 23:12:17 CET 2006
http://www.unixwiz.net/techtips/wget-dotfiles.html
Here they explain how to get the . files : one have to issue the LIST
with -a as a parameter (as for ls)
>>> ftp.retrlines('LIST')
drwxr-xr-x 3 bsergean bsergean 176 Dec 16 03:40 httpd
-rwxr-xr-x 1 bsergean bsergean 4222 Dec 16 03:40 index_flanders.html
-rwxr-xr-x 1 bsergean bsergean 571 Dec 12 20:32 redirection.html
-rw-r--r-- 1 bsergean bsergean 69 Dec 12 23:17 svn-commit.2.tmp~
-rw-r--r-- 1 bsergean bsergean 69 Dec 12 23:16 svn-commit.tmp
-rw-r--r-- 1 bsergean bsergean 69 Dec 12 23:16 svn-commit.tmp~
-rw-r--r-- 1 bsergean bsergean 353 Nov 8 2005 vpn.pcf
-rw-r--r-- 1 bsergean bsergean 355 Nov 8 2005 vpn.pcf~
'226-Transfer complete.\n226 Down: 0 Files (0mb) Up: 0 Files (0mb)
10,000,000:1 CR: LEECH'
>>> ftp.retrlines('LIST -a')
drwxr-xr-x 5 bsergean bsergean 728 Dec 26 20:28 .
drwxr-xr-x 115 bsergean bsergean 7992 Dec 27 21:29 ..
-rw-r--r-- 1 bsergean bsergean 2471 Nov 17 19:43 .addressbook
-rw-r--r-- 1 bsergean bsergean 3100 Dec 12 23:16 .bash_profile
-rw-r--r-- 1 bsergean bsergean 3074 Dec 12 20:32 .bash_profile~
-rw-r--r-- 1 bsergean bsergean 1287 Dec 16 03:40 .bashrc_adm424
-rw-r--r-- 1 bsergean bsergean 4019 Dec 26 20:28 .bashrc_bsergean
-rw-r--r-- 1 bsergean bsergean 4019 Dec 26 18:43 .bashrc_bsergean~
lrwxrwxrwx 1 bsergean bsergean 16 Nov 21 19:52 .bashrc_build
-> .bashrc_bsergean
lrwxrwxrwx 1 bsergean bsergean 16 Dec 12 22:36 .bashrc_ttf ->
.bashrc_bsergean
drwxr-xr-x 4 bsergean bsergean 872 Nov 16 21:27 .emacs
-rw-r--r-- 1 bsergean bsergean 3229 Dec 12 22:36 .emacs.el
-rw-r--r-- 1 bsergean bsergean 613 Nov 17 19:43 .fetchmailrc
-rw-r--r-- 1 bsergean bsergean 19847 Nov 17 19:43 .pinerc
-rw-r--r-- 1 bsergean bsergean 1706 Dec 16 03:40 .procmailrc
drwxr-xr-x 7 bsergean bsergean 296 Dec 19 01:05 .svn
drwxr-xr-x 3 bsergean bsergean 176 Dec 16 03:40 httpd
-rwxr-xr-x 1 bsergean bsergean 4222 Dec 16 03:40 index_flanders.html
-rwxr-xr-x 1 bsergean bsergean 571 Dec 12 20:32 redirection.html
-rw-r--r-- 1 bsergean bsergean 69 Dec 12 23:17 svn-commit.2.tmp~
-rw-r--r-- 1 bsergean bsergean 69 Dec 12 23:16 svn-commit.tmp
-rw-r--r-- 1 bsergean bsergean 69 Dec 12 23:16 svn-commit.tmp~
-rw-r--r-- 1 bsergean bsergean 353 Nov 8 2005 vpn.pcf
-rw-r--r-- 1 bsergean bsergean 355 Nov 8 2005 vpn.pcf~
'226-Transfer complete.\n226 Down: 0 Files (0mb) Up: 0 Files (0mb)
10,000,000:1 CR: LEECH'
By default ftputils doesn't use that.
I tried hard to understand the code but didn't see any DIR or try.
The closest I found was
def _dir(self, path):
in the ftputil function ...
And here is a mirror tool I'm working on:
import logging
logger = logging.getLogger("ftpUploader")
logger.setLevel(logging.DEBUG)
#create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
#create formatter
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s
- %(message)s")
#add formatter to ch
ch.setFormatter(formatter)
#add ch to logger
logger.addHandler(ch)
from ftputil import FTPHost
from glob import glob
class ftpUploader(FTPHost):
def exists(self, fn):
''' Test whether file exist in the current remote dir '''
return basename(fn) in self.listdir('.')
def mirror(self, dirname):
logger.info('mirror (%s)' % dirname)
remoteDirname = basename(dirname)
if self.exists(remoteDirname):
logger.info('Remove dir %s' % remoteDirname)
self.rmdir(remoteDirname)
logger.info('Create remote dir %s' % remoteDirname)
self.mkdir(remoteDirname)
logger.info('chdir to remote dir %s' % remoteDirname)
self.chdir(remoteDirname)
walkdir = dirname
for path, subdirs, files in os.walk(walkdir):
print path, subdirs, files
os.chdir(path)
if path != walkdir:
self.chdir(path.split(walkdir + os.sep)[1])
for d in subdirs:
if not self.exists(d):
self.mkdir(d)
for f in files:
self.upload(f, f)
ftp = ftpUploader('localhost', 'bsergean', 'secret')
Hope you can do some stuff with that,
Benjamin.
More information about the ftputil
mailing list