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
-rt
ls
-exec ls -lrt {} +
ls