이틀(즉, 오늘과 어제) 동안 디렉터리에서 파일 찾기

이틀(즉, 오늘과 어제) 동안 디렉터리에서 파일 찾기

Linux에서 오늘과 어제의 폴더에서 파일을 찾으려면 명령이나 쉘 스크립트가 필요합니다.

오늘 명령을 실행하면 오늘과 어제 생성된 파일 목록이 제공되어야 합니다.

다음 명령을 시도했지만 예상한 결과를 얻지 못했습니다.

find . -type f -mtime +2 -prune -o -mtime +1 -exec ls -ltr {} \;

오늘의 문서 하나만 제공하고 어제와 그제의 문서 몇 개만 제공합니다.

답변1

GNU 사용 find:

find . -daystart -type f -mtime -2 -mtime +-1 -ls

어제 00:00:00부터 오늘 23:59:59.999999999 사이에 마지막으로 수정된 파일을 제공해드립니다. 오늘부터 24시간 단위 수를 계산하기 때문에 일광 절약 시간(겨울/여름 시간이 있는 시간대) 전환 및 일광 절약 시간 전후의 일광 절약 시간 전환 시 잘못된 결과가 나올 수 있습니다. 시간을 절약하면 하루가 23시간 또는 25시간이 됩니다.

다음과 같이 할 수도 있습니다(계속 GNU 사용 find).

find . -type f -newermt yesterday ! -newermt tomorrow -ls

하지만 이렇게 하면 어제 해당 시간에 수정된 파일이 아닌 내일 정확히 00:00:00.000000000에 수정된 파일이 제공됩니다. 파일의 마지막 수정 시간이 나노초 이내일 가능성은 극히 낮지만, touch수정 시간이 임의로 설정된 파일이나 1초 미만의 시간 단위가 없는 파일 시스템의 파일에서 발생할 수 있습니다.

그리고 zsh:

autoload age # best in ~/.zshrc
ls -lrtd -- *(D.e:'age yesterday tomorrow':)

또는 재귀적으로 사용하십시오 find:

ls -lrtd -- **/*(D.e:'age yesterday tomorrow':)

(경계에 대해서는 find -newermt위와 동일합니다.)


올바른 결과를 얻지 못하는 이유는 다음과 같습니다.

find . -type f -mtime +2 -prune -o -mtime +1 -exec ls -ltr {} \;

먼저 -a(생략된 경우 암시됨)이 앞에 있으므로 -o위의 내용은 실제로 다음과 같습니다.

find . \( -type f -a -mtime +2 -a -prune \) -o \
  \( -mtime +1 -a -exec ls -ltr {} \; \)

따라서 -type f첫 번째 그룹에서만 작동합니다.

-mtime +2나이가 2보다 큰 다음 날(24시간)로 반올림되는 파일을 선택합니다. 즉, 파일은 현재 날짜와 비교하여 48시간 전에 마지막으로 수정되었으며 -mtime +1파일은 24시간 전에 마지막으로 수정되었습니다.

나이를 하루의 시작과 비교해야 합니다(따라서 (GNU 특정) -daystart).

또한 를 사용하면 파일당 하나씩 실행 -exec ls -lrt {} \;되므로 정렬할 파일이 하나뿐이므로 파일 정렬 옵션은 쓸모가 없습니다 . 대신 사용할 수도 있지만 파일 목록이 크면 여러 번 호출될 수 있습니다.ls-rtls-exec ls -lrt {} +ls

관련 정보