NcFTPでリモートのファイル名を変更する
#!/bin/bash
echo 'open -u ${USER} -p ${PASS} ${HOST}
cd ${BASE_DIR}
ls
rm -rf ${BACKUP_FILE}
rename ${CURRENT_FILE_NAME} ${BACKUP_FILE}
rename ${NEW_FILE_NAME} ${CURRENT_FILE_NAME}
ls
quit'|ncftp
ファイルを切り替える際に、Jenkinsから叩こうと思って書いたけど、結局却下して、下のpythonに変更した。
Pythonでリモートのファイル名を変更する
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print 'python >>>'
import sys, os, datetime, re
from ftplib import FTP
ftp_host = 'ホスト名'
ftp_user = 'ユーザー名'
ftp_pass = 'パスワード'
ftp_base_dir = 'リネームするファイルのあるディレクトリ'
ftp_from_dir = '新しく公開するファイル'
ftp_to_dir = '現在公開中のファイル'
ftp_backup_prefix = '_'
def main(arg_user='', arg_pass='', *args):
if arg_user == '' or arg_pass == '':
print ' Rename directory failed'
print ' Error: User or Password is not input.'
return
ftp_user = arg_user
ftp_pass = arg_pass
dt = str(datetime.datetime.utcnow())
dt = dt.replace(':', '-')
dt = dt.replace(' ', '_')
dt = re.sub(r'\.\d+', '', dt)
print ' Rename directory start >>> ' + dt
try:
ftp = FTP(ftp_host)
ftp.login(ftp_user,ftp_pass)
ftp.cwd(ftp_base_dir)
file_list = ftp.nlst()
if ftp_from_dir in file_list:
ftp.rename(ftp_to_dir, ftp_backup_prefix+dt)
ftp.rename(ftp_from_dir,ftp_to_dir)
else:
print ' Rename directory failed'
print ' Error: NotFound New Directory'
ftp.close()
print ' Rename directory finished'
except Exception as e:
print ' Rename directory failed'
print ' Error: ' + e.message
if __name__ == '__main__':
sys.path.append(os.path.dirname(__file__))
sys_args = sys.argv
args = sys_args[1:] if len(sys_args) > 1 else []
main(*args)
上のpythonを実行
python file_rename.py UserName Password
バックアップは、アップロードの時にすればいいから
古いファイルは削除でいい気がする。