1. seyself

    Posted

    seyself
Changes in title
+シェルでNcFTPを使ってリモートのファイルをリネームして差し替える
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,83 @@
+
+```sh: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に変更した。
+
+```py: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)
+```
+
+```sh:上のpythonを実行
+python file_rename.py UserName Password
+```
+
+バックアップは、アップロードの時にすればいいから
+古いファイルは削除でいい気がする。
+