タイムスタンプを一括変更するスクリプト

このスクリプトは、下記のディレクトリ構造に配置された ディレクトリ、および ファイル のタイムスタンプ(YYYY/MM/DD 00:00:00)を設定するためのスクリプトだ。

ディレクトリ構造

構造 日付
/home/rhel/data(基準となるディレクトリ)  
 2013 2013/01/01 00:00:00
  01 2013/01/01 00:00:00
   02 2013/01/02 00:00:00
    file1 2013/01/02 00:00:00
    file2 2013/01/02 00:00:00
  02 2013/02/01 00:00:00
   03 2013/02/03 00:00:00
    file1 2013/02/03 00:00:00
    file2 2013/02/03 00:00:00
    file3 2013/02/03 00:00:00
  03 2013/03/01 00:00:00
  04 2013/04/01 00:00:00
  05 2013/05/01 00:00:00
 2014 2014/01/01 00:00:00
 2015 2015/01/01 00:00:00

スクリプト(chts


#!/usr/bin/bash

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#
# (C) 1971-2015 Matt.
#
#  SCRIPT NAME: chts (Change Time Stamp)
#  VERSION: 1.0
#  CREATED DATE: 2015/01/12
#  UPDATE DATE: 2015/01/12
#
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#------------------------------------------------------------------------------
# FUNCTION NAME: setTimeStamp
# DESCRIPTION:   Change directory and file timestamp.
# EXAMPLE:       setTimeStamp 'Path'
#------------------------------------------------------------------------------
function setTimeStamp() {

    local var_Path
    local var_File
    local var_TimeStamp
    local var_Temporary

    var_Path="${1}"
    var_Temporary="$(mktemp)"

    #
    # [yyyy/mm/dd].
    #
    find "${var_Path}" | \
    grep -e '[0-9]\{4\}/[0-9]\{2\}/[0-9]\{2\}' > "${var_Temporary}"
    cat "${var_Temporary}" | while read var_File
    do
        var_TimeStamp="$(echo "${var_File}" | \
                         grep -e'[0-9]\{4\}/[0-9]\{2\}/[0-9]\{2\}' -o | \
                         sed -e 's/\///g')"
        touch -t "${var_TimeStamp}0000.00" "${var_File}"
    done

    #
    # [yyyy/mm].
    #
    find "${var_Path}" -type d | \
    grep -e '[0-9]\{4\}/[0-9]\{2\}$' > "${var_Temporary}"
    cat "${var_Temporary}" | while read var_File
    do
        var_TimeStamp="$(echo "${var_File}" | \
                         grep -e '[0-9]\{4\}/[0-9]\{2\}' -o | \
                         sed -e 's/\///g')"
        touch -t "${var_TimeStamp}010000.00" "${var_File}"
    done

    #
    # [yyyy].
    #
    find "${var_Path}" -type d | \
    grep -e '[0-9]\{4\}$' > "${var_Temporary}"
    cat "${var_Temporary}" | while read var_File
    do
        var_TimeStamp="$(echo "${var_File}" | \
                         grep -e '[0-9]\{4\}' -o | \
                         sed -e 's/\///g')"
        touch -t "${var_TimeStamp}01010000.00" "${var_File}"
    done

    rm -f "${var_Temporary}"
    tree "${var_Path}" -C --timefmt '%Y/%m/%d %H:%M:%S'

    unset var_Path
    unset var_File
    unset var_TimeStamp
    unset var_Temporary

}

#------------------------------------------------------------------------------
# FUNCTION NAME: showHelp
# DESCRIPTION:   Display explanation of usage.
# EXAMPLE:       showHelp
#------------------------------------------------------------------------------
function showHelp() {

    local var_Script

    var_Script="$(basename "${0}")"

    cat << _EOF_
usage:
    ${var_Script} [PATH]
    ${var_Script} /path/to/directory
_EOF_

    unset var_Script

}

#------------------------------------------------------------------------------
# DESCRIPTION: Main code.
#------------------------------------------------------------------------------
if [ -z "${1}" ]; then
    showHelp
    exit 1
else
    if [ -d "${1}" ]; then
        setTimeStamp "${1}"
        exit 0
    else
        showHelp
        exit 1
    fi
fi

エディター等で、chts ファイルを作成する。
次に、作成した chts ファイルに実行権限を付与する。

実行結果

スクリプトを実行し、結果を確認する。


./chts /home/rhel/data


Linux bash スクリプト chts - 1