今月作成されたファイルを確認してください。

今月作成されたファイルを確認してください。

私のディレクトリにファイルがあり、そのファイルが当月に作成されたことを確認する必要があります。シェルスクリプトでソリューションを試しています。

例:私のファイルパスは次のとおりです。ファイルが今月作成されたことをdata/tmp/docs/test.txt確認したいと思います。test.txt

答え1

GNUを使用したり、dateLinuxをカーネルとして使用したりするシステムでbusybox date最も一般的な実装は次のとおりです。date

if [ "$(date -r file +%Y%m)" = "$(date +%Y%m)" ]; then
  echo "file was last modified this month"
fi

(シンボリックリンクの場合は、ターゲットのmtimeを確認してください。)

POSIXlyでは、次のように同じ結果が得られます。

(
  export LC_ALL=C; unset -v IFS
  eval "$(date +'cur_month=%b cur_year=%Y')"
  ls -Lnd file | {
    read -r x x x x x month x year_or_time x &&
      case $month-$year_or_time in
        ("$cur_month-$cur_year" | "$cur_month"-*:*)
          echo "file was last modified this month"
      esac
  }
)

答え2

find -ctimeこれは、date +%d(月の日付)の組み合わせを使用して実行できます。完全なコマンドは次のとおりです。

find data/tmp/docs/test.txt -ctime -`date +%d`

ファイルが最新の場合は出力日数が表示され、それ以外の場合は出力は空です。したがって、変数に割り当てて空であることを確認してください。

OUTPUT=$( find data/tmp/docs/test.txt -ctime -`date +%d` )
if [ -n "$OUTPUT" ] ; then echo "file created in current month" ; fi

アップデート:@StéphaneChazelasがコメントで述べたように、-ctimeは作成時間ではなくステータス変更時間(fe chmodはその日付を更新します)ですが、Linuxは状態構造以下のみを含む:

time_t    st_atime   time of last access
time_t    st_mtime   time of last data modification
time_t    st_ctime   time of last status change

したがって、IMHO、ファイル生成後に状態変更がない場合は、ctimeが最良のオプションです。

関連情報