やっつけスクリプト Returns in python 2.3.4
# -*- coding: utf-8 -*- from ftplib import FTP from ftplib import error_perm import logging import os import time ### settings FTP_SERVER = '192.168.1.1' FTP_USER = 'ftpuser' FTP_PASSWD = 'ftpuser' FTP_HOME = '/home/ftpuser' TARGET_FILE_LIST_NAME = 'list.txt' ### settings (end) LOG_FILE_NAME = 'ftp_' + time.strftime('%Y%m%d_%H%M%S') + '.log' logger = None # ログの設定を行います。 def set_logging_option(log_file_name): global logger logger = logging.getLogger(log_file_name) handler = logging.FileHandler(log_file_name, 'w') formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.INFO) # FTPコネクションオブジェクトを作成して戻します。 def ftp_connect(ftp_server, ftp_user, ftp_passwd): ftp = FTP(ftp_server) message = ftp.login(user=ftp_user, passwd=ftp_passwd) logger.info(message) return ftp # 指定されたファイルをFTPで削除します。 def ftp_delete(ftp, target): try: message = ftp.delete(target) logger.info(message + ' ' + target) except error_perm: logger.error('Delete failed.' + ' ' + target) # 削除すべきファイルリストを作成します。 def make_delete_file_list(filename): os.system("/usr/bin/find /foo/bar -type f -name '*properties' -print > %(filename)s" % locals()) # main def main(): set_logging_option() make_delete_file_list(TARGET_FILE_LIST_NAME) ftp = ftp_connect(FTP_SERVER, FTP_USER, FTP_PASSWD) for line in file(TARGET_FILE_LIST_NAME, 'r'): ftp_delete(ftp, os.path.join(FTP_HOME, line)) ftp.close() logger.info('done.') if __name__ == '__main__': main()
ちなみに、このスクリプトは結局使いませんでした。
同僚が書きかけたシェルスクリプトの残骸があることが分かったので、
それを再利用する形で落ち着きました。
$ find /foo/bar -type f -name '*properties' -print > filelist $ cat sh_header filelist sh_footer | sed -e 's/\foo\bar//' > exec.sh $ sh ./exec.sh
(sh_header には FTP 接続処理が、sh_footer には クローズ処理が書かれています)