오늘 생성되지 않은 파일을 모두 삭제하는 방법

오늘 생성되지 않은 파일을 모두 삭제하는 방법

delete all오늘 생성되지 않은 폴더의 파일을 원합니다 . 다음을 사용하여 오늘 생성된 파일 목록을 얻는 방법을 알고 있습니다.

find . -type f -mtime -1

그런데 오늘 생성되지 않은 모든 파일의 목록을 얻는 방법을 모르겠습니다. 기본적으로 폴더에 오늘이 아닌 오래된 타임스탬프가 있는 파일이 있는지 찾아야 합니다. 기존 파일이 있으면 삭제합니다.

답변1

find . -type f -mtime +0 -exec rm -f {} +

또는

find . -type f ! -mtime -1 -exec rm -f {} +

내용이 마지막으로 수정된 지 24시간 이상 지난 일반 파일은 삭제됩니다( -mtime +0즉, 해당 내용나이일 단위로 측정됩니다(정수로 반내림, 일은 24시간 또는 86400 Unix epoch 초). 엄격히 0보다 큼).

일부 find구현에는 -delete대신 사용할 수 있는 조건자가 있어 -exec rm -f {} +더 안전하고 효율적입니다.

GNU를 사용하면 오늘 00:00:00 이전에 마지막으로 수정된 파일에 대한 조건자를 find추가할 수 있습니다 -daystart. 여기에는 24시간이 지나지 않았더라도 어제 마지막으로 수정된 파일이 포함됩니다.

일부 find구현을 사용하면 다음을 수행할 수도 있습니다.

find . ! -newermt 00:00:00 -delete

오늘 00:00:00 이전(또는 정확히) 마지막으로 수정된 파일을 삭제합니다.

답변2

기본적으로 또는 다음을 통해 zsh를 사용하십시오 zsh -c "...".

rm -f /path/to/folder/*(.m+0)     # for that directory only

rm -f /path/to/folder/**/*(.m+0)  # recursively

대괄호 (... )만들기zsh "전역 한정자". 내부에서 점은 .일반 파일을 지정하며( find 와 유사 -type f) m+0파일의 수정 시간이 0일 전보다 커야 합니다(1일로 잘림). 23시간은 0일이고 25시간은 1일입니다.

"숨겨진" 파일(점으로 시작) 찾기/일치의 기본 동작 과 더 밀접하게 일치시키려면 find대문자 D 한정자를 추가하세요.

rm -f /path/to/folder/*(D.m+0)     # for that directory only

rm -f /path/to/folder/**/*(D.m+0)  # recursively

답변3

-notfind에는 or 인수가 있으며 !후자를 무효화하고 -delete파일을 삭제합니다.

find . ! -mtime -1 -type f -delete

-notPOSIX 규격이 아닙니다 .

답변4

하루 동안 오래된 파일의 양이 많을 경우, 철저함을 보장하기 위해 다음과 같은 작업을 수행합니다. 하루에 파일 수를 가져옵니다.

$ find . -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
# Output:
  42315 2020-09-29
  42315 2020-09-30
  42315 2020-10-01
  42315 2020-10-02
  42315 2020-10-03
  42315 2020-10-04
  42315 2020-10-05
   2275 2020-10-06

그리고 오늘보다 오래된 모든 파일을 삭제합니다.

$ find . -mindepth 1 -type f -mtime +0 | xargs /bin/rm -f
## Now to check the count again.
$ find . -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
   2275 2020-10-06

이유는 잘 모르겠지만 사용하는 데 -exec rm시간이 많이 걸리고 배관이 xargs더 빠르다는 것을 알았습니다.

관련 정보