내 디렉토리에 파일이 있는데 해당 파일이 당월에 생성되었는지 확인해야 합니다. 쉘 스크립트에서 솔루션을 시도하고 있습니다.
예: 내 파일 경로는 다음과 같습니다. 파일이 이번 달에 생성되었는지 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이 가장 좋은 옵션입니다.