Posted at

シェルでNcFTPを使ってリモートのファイルをリネームして差し替える

More than 5 years have passed since last update.


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


バックアップは、アップロードの時にすればいいから

古いファイルは削除でいい気がする。