私のディレクトリにファイルがあり、そのファイルが当月に作成されたことを確認する必要があります。シェルスクリプトでソリューションを試しています。
例:私のファイルパスは次のとおりです。ファイルが今月作成されたことをdata/tmp/docs/test.txt
確認したいと思います。test.txt
答え1
GNUを使用したり、date
Linuxをカーネルとして使用したりするシステムで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が最良のオプションです。