2011年12月21日水曜日

ファイル名にタイムスタンプを付与してコピー


■スクリプト概要
バックアップする際、元ファイルのタイムスタンプをファイル名に使用したい場合があった時に
便利なスクリプトです。特に複数ファイルまとめて処理しようとする場合に活躍するはず…。


#!/bin/sh
#######################################################################
# << 機能概要 >>
# バックアップしたファイル名に元ファイルのタイムスタンプを付与する
#
# <<変更履歴>>
# Version  変更日      変更者        変更内容
# --------+-----------+-------------+----------------------------------
#     1.0  2011/xx/xx  tanyao        対象ファイルリスト読込み
#######################################################################

FILE_LIST=file_list.txt
LOG_FILE=log_add_timestamp.log

# リストファイル存在チェック
if [ ! -f $FILE_LIST ]; then
    echo "ERORR: $FILE_LIST is not exist."
    exit 1
fi


i=0
while read line
do
    cp_target[$i]="$line"

    # コピー対象ファイル存在チェック
    if [ -f ${cp_target[$i]} ]; then
        timestamp=`ls -lrt --time-style='+%Y%m%d' ${cp_target[$i]} | awk '{print $6}'`
        cp -p ${cp_target[$i]} ${cp_target[$i]}.${timestamp} > /dev/null 2>&1
        ls -l ${cp_target[$i]} ${cp_target[$i]}.${timestamp} >> ${LOG_FILE}
    else
        echo "ERORR: ${cp_target[$i]} is not exist." >> ${LOG_FILE}
#        continue
    fi

    i=`expr $i + 1`
done < ${FILE_LIST}

echo "" >> ${LOG_FILE}

exit 0


■以下、補足説明

このシェルスクリプト(add_timestamp.sh)はコピー対象のファイルパスが記載された
file_list.txtというファイルを同階層にご準備ください。
[root@tanyao ~]# cat file_list.txt
/tmp/test01.txt
/tmp/test02.txt
/tmp/test03.txt
/tmp/test04.txt

コピー対象ファイルのあるディレクトリの状況はこんな感じ。
[root@tanyao ~]# ll /tmp/test*
-rw-r--r-- 1 root root 132  2月  2  2002 /tmp/test01.txt
-rw-r--r-- 1 root root 132  6月  6  2006 /tmp/test02.txt
-rw-r--r-- 1 root root 132  6月  6  2006 /tmp/test02.txt.20060606
-rw-r--r-- 1 root root 132 12月 21 15:29 /tmp/test04.txt
※すでに複製後のファイルが存在していても上書きする仕様です。

スクリプトを実行すると同階層にログファイルが出力され、期待通り
タイムスタンプ名入りのコピーファイルが作成されたか確認できます。
[root@tanyao ~]# ./add_timestamp.sh
[root@tanyao ~]# cat log_add_timestamp.log
-rw-r--r-- 1 root root 132  2月  2  2002 /tmp/test01.txt
-rw-r--r-- 1 root root 132  2月  2  2002 /tmp/test01.txt.20020202
-rw-r--r-- 1 root root 132  6月  6  2006 /tmp/test02.txt
-rw-r--r-- 1 root root 132  6月  6  2006 /tmp/test02.txt.20060606
ERORR: /tmp/test03.txt is not exist.
-rw-r--r-- 1 root root 132 12月 21 15:29 /tmp/test04.txt
-rw-r--r-- 1 root root 132 12月 21 15:29 /tmp/test04.txt.20111221

[root@tanyao ~]# 

ちなみに、ファイルのタイムスタンプを変更するには、
[root@tanyao ~]# touch -t 200202021751 /tmp/test01.txt


こちらの情報が何かのお役に立てましたら幸いです。

0 件のコメント:

コメントを投稿