私はシェル コーディングの初心者ですが、この質問をするのに適切な場所にいることを願っています。私は、毎日ファイルを収集して FTP 経由で送信するシェル スクリプトを使用しています。ファイル名には日付と時刻の両方が含まれており、ファイルの種類はテキストです(.txt)
。ファイルは、毎日さまざまな時間に作成される他の多くのファイルがあるディレクトリにあります。送信しようとしているファイルは、午前 8 時に作成されていますが、分と秒が異なります。例:
team1_mnpg_ef_part_2018-02-26_080005.txt
team1_abc_part_2018-02-26_080031.txt
ファイル名の時間は異なりますが、すべて 08 が時間であり、たとえば今日の日付と 08 が時間で、任意の分と秒 (分と秒は関係ありません) を含むすべてのファイルを送信します。これが私のコードです:
#!/bin/ksh
#
#
DATE=`date "+%Y-%m-%d"`
HOST='abcd.dmn.com'
USER='*****'
PASSWD='******'
LOCALPATH='/opt/abc/Output'
LOGPATH='/opt/abc/logs'
ftp -n -v $HOST <<END_SCRIPT>>$LOGPATH/ftp_abc_$DATE_log.txt
quote USER $USER
quote PASS $PASSWD
lcd $LOCALPATH
put team1_abc_part_$DATE_(I do not know what should I write here).txt
put team1_mnpg_ef_part_$DATE_.txt
put team1_fdop_part_$DATE_.txt
quit
END_SCRIPT
exit 0
ファイルはディレクトリ内にあり、put team1_abc_part_$DATE_080031.txt
上記のスクリプトのようにタイムスタンプを書き込むと、正常に動作し、送信されたファイルを宛先サーバーで確認できます。
スクリプトが 08 に作成されたファイルを任意の分と秒で送信するようにするには、ファイル名の時間部分に何を記述すればよいですか?
答え1
#!/bin/ksh
#
#
DATE=`date "+%Y-%m-%d"`
HOUR=`date "+%H"`
.....
mput team1_abc_part_$DATE_$HOUR*txt
.......
「put」の代わりに「mput」を使用してください。 https://stackoverflow.com/questions/6692799/how-to-ftp-multiple-file-using-shell-script
以下も役に立つかもしれません:
# get timestamp
date +%s
# from timestamp to Date
date "+%Y-%m-%d" -d @1519661267
# date 2 minuts ago
date "+%Y-%m-%d" -d "-2 min"