2016년에 생성된 디렉터리와 해당 하위 디렉터리의 파일 수를 (재귀적으로) 가져오고 싶습니다. ".txt"와 같이 특정 파일로 끝나는 파일에만 관심이 있습니다. 터미널에서 어떻게 이를 달성할 수 있나요?
답변1
GNU 사용 find
:
find /some/dir -type f -name '*.txt' -printf '%CY\n' | grep -Fxc 2016
ctime
그러면 현지 시간대를 기준으로 2016년의 파일이 계산됩니다. 이는 ctime
파일 생성 시간이 아니라 표준 UNIX 의미 체계를 사용하여 기대할 수 있는 최상의 근사치입니다.
수정 시간을 일치시키려면 -printf '%TY\n'
위의 방법을 대신 사용할 수 있습니다 -printf '%CY\n'
.
답변2
이는 이식 가능한 방식이므로 GNUfind
.
먼저 타임스탬프가 있는 파일을 만듭니다.
touch -t 201601010000 /tmp/2016 && touch -t 201701010000 /tmp/2017
그런 다음 실행하십시오.
find /some/path -type f -name '*.txt' -newer /tmp/2016 ! -newer /tmp/2017
답변3
GNU find
와 시스템 및 파일 시스템 지원 파일이 있습니다.출생 시간:
find . -name '*.txt' -type f -newerBt 2016-01-01 \
! -newerBt 2017-01-01 -printf . | wc -c
기술적으로 이는 2016-01-01 00:00:00.000000000 나노초에 생성된 파일을 제외하고 2017년에 해당 나노초에 생성된 파일을 포함합니다(시계가 그렇게 정확할 것이라고 기대하지는 않습니다. 모두 중요하지만 00:00:00에 cron 작업으로 생성된 파일과 같이 1초 미만의 타임스탬프를 지원하지 않는 파일 시스템에 중요할 수 있습니다.
시스템이 생성 시간을 지원하지 않는 경우 마지막 수정 시간으로 되돌릴 수 있습니다. 생성 시간은 파일에 포함된 데이터의 시간이 아니라 파일이 인스턴스화된 시간(반드시 해당 이름일 필요는 없음)이므로 더 나을 것입니다. 실제로는 거의 의미가 없는 이와 같이 작성되었습니다.) newerBt
로 변경하여 newermt
.
BSD find
(원본 -newerxy
)를 사용하면 다음과 같이 변경할 수 있습니다.
find .//. -name '*.txt' -type f -newerBt 2016-01-01 \
! -newerBt 2017-01-01 | grep -c //