タイトルの通りです。
#!/bin/sh # # 名称 # find_new_file.sh - 指定日時よりも更新日付の新しいファイルを表示する。 # # 書式 # find_new_file.sh [-rv] [[CC]YY]MMDDhhmm[.ss] [directory] # # 解説 # 指定日時より更新日付の新しいファイルを表示します。 # ディレクトリ指定が無い場合はカレントディレクトリ下を検索します。 # # ex) # find_new_file.sh 200611200000 ./tmp # ./tmp下から更新日付が2005/11/20 00時00分より新しいファイルを表示 # # -r リバースモード 指定日時より更新日付の古いファイルを表示 # # -v 冗長モード ファイルの詳細情報を表示 # # 戻り値 # 0 正常終了 # 1 指定したファイルが存在しない場合 # ############################################################################### CMDNAME=`basename $0` USAGE="Usage: $CMDNAME [-rv] [[CC]YY]MMDDhhmm[.SS] [directory]" TMP_FILE=/tmp/basetmp.$$ BASE_DIR= V=FALSE R=FALSE IsNewer() { # 名称 # IsNewer - 2つのファイルの日付を比較する # # 書式 # IsNewer file1 file2 # # 解説 # file2の更新日付よりfile1の更新日付が新しい場合真(0)を返却する。 # そうでない場合には偽(1)を返却する。 # if [ $# -ne 2 ]; then echo "Usage: IsNewer file1 file2" 1>&2 exit 1 fi if [ ! -f $1 -o ! -f $2 ]; then return 1 fi if [ -n "`find $1 -newer $2 -print`" ]; then return 0 else return 1 fi } trap `rm -f /tmp/*.$$; exit 1` 1 2 3 15 # # オプション処理 # if [ "$OPTIND" = 1 ]; then while getopts rv OPT do case $OPT in r) R=TRUE ;; v) V=TRUE ;; \?) echo "$USAGE" 1>&2 exit 1 ;; esac done shift `expr $OPTIND - 1` else USAGE="Usage: $CMDNAME [-r] [-v] [[CC]YY]MMDDhhmm[.SS] [directory]" while : do case $1 in -r) R=TRUE shift ;; -v) V=TRUE shift ;; --) shift break ;; -*) echo "$USAGE" 1>&2 exit 1 ;; *) break ;; esac done fi # # コマンド引数チェック # if [ $# -eq 1 ]; then BASE_DIR="." elif [ $# -eq 2 ]; then BASE_DIR="$2" else echo "$USAGE" 1>&2 exit 1 fi # # 比較用一時ファイルの作成 # touch -t "$1" $TMP_FILE # # 検索処理 # for f in `find $BASE_DIR \( -type f -o -type l \) -print` do FILE1="$f" FILE2="$TMP_FILE" if [ "$R" = "TRUE" ]; then FILE1="$TMP_FILE" FILE2="$f" fi if IsNewer $FILE1 $FILE2; then f=`echo "$f" | sed -e 's%^\./%%'` if [ "$V" = "TRUE" ]; then ls -al "$f" else echo "$f" fi fi done # # 一時ファイルの削除 # rm -f /tmp/*.$$ exit 0