이 stat
명령을 사용하여 디렉터리에 마지막으로 액세스한 날짜를 보고 형식을 지정합니다. 이것adate
find
특정 날짜 이전에 변경된 디렉토리를 찾는 방법이 있습니까 ?test
답변1
쉘 스크립트
find
sed
, , , sort
(및 echo
"사용" 부분) 만 사용하여 다음 쉘 스크립트를 시도해 볼 수 있습니다 . find
할 수 있는 일은 할 수 있다 stat
. 유일한 차이점은 !
테스트를 무효화하는 문자 하나입니다 -newerat
.
olderdate
:
#!/bin/bash
if [ $# -ne 2 ]
then
echo "Usage: $0 <reference date> <directory> "
echo "Example: $0 2018-11-30 ."
exit
fi
find "$2" -type d ! -newerat "$1" -printf "%AY-%Am-%Ad %AT %p\n" |
sed -e 's%\..* /% /%' \
-e 's%\..* \.% .%' | sort
newerdate
:
#!/bin/bash
if [ $# -ne 2 ]
then
echo "Usage: $0 <reference date> <directory> "
echo "Example: $0 2018-11-30 ."
exit
fi
find "$2" -type d -newerat "$1" -printf "%AY-%Am-%Ad %AT %p\n" |
sed -e 's%\..* /% /%' \
-e 's%\..* \.% .%' | sort
날짜뿐만 아니라 시간도 지정 hours
하거나 두 번째 인수를 인용하는 hours:minutes
경우hours:minutes:seconds
./olderdate '2018-12-19 18' /path
접근 시간의 "자동" 수정에 대한 설명
몇 가지 테스트를 수행한 결과 어떤 경우에는 검색 디렉토리의 액세스 날짜와 시간이 수정될 수 있음 을 확인했습니다 find
. stat
이는 디렉토리의 내용이 변경되었지만 디렉토리 자체의 액세스 시간이 업데이트되지 않은 경우 발생하는 것 같습니다.
이 경우 출입 시간은 현재 시간으로 설정됩니다. 그러나 디렉터리를 다시 검색할 때 find
액세스 stat
날짜와 시간은 동일하게 유지됩니다(디렉터리에서 다시 변경되는 사항이 없는 한).
답변2
다음과 같이 시작할 수 있습니다.
MY_DATE="2018-12-19 06:30"
for i in $(find . -type d)
do
if [[ $(date -d"$(stat $i | grep ^Access | tail -1 | awk '{print $2 " " $3}')" +%s) -gt $(date -d"$MY_DATE" +%s) ]]
then
echo $i
fi
done
경로에 공백이 포함된 디렉터리에서는 작동하지 않습니다.
스크립트는 실행된 위치에서 발견된 모든 디렉터리를 반복하고(find 명령을 수정하여 변경할 수 있음) 해당 디렉터리에 대해 stat를 실행하여 액세스 날짜를 MY_DATE 변수에 제공된 날짜와 비교합니다.
답변3
이 정도가 맞나요?
$ cd ~
# adate for ./Pictures/
$ stat -c %x ./Pictures/
2018-05-18 11:08:44.326743397 -0400
# adate for ./Music/
$ stat -c %x ./Music/
2018-05-18 11:08:44.325743396 -0400
# Change das adate for ./Music/:
$ ls -la ./Music/
drwxr-xr-x. 2 leeand00 leeand00 6 May 18 2018 .
drwx------. 24 leeand00 leeand00 4096 Dec 11 09:54 ..
# Read the adate for ./Music/ to see that it changed:
$ stat -c %x ./Music/
2018-12-19 23:35:04.789892164 -0500
# Read the adate from ./Pictures/ to see that it did not change:
$ stat -c %x ./Pictures/
2018-05-18 11:08:44.326743397 -0400
# Don't re-invent the wheel:
# `-type d` (look for folders only)
#
# `-maxdepth 1` (Only look inside this directory for folders,
# don't descend lower than that)
#
# `-amin -300` ()
#
$ find . -maxdepth 1 -type d -amin -300
.
./Music