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
-not
find에는 or 인수가 있으며 !
후자를 무효화하고 -delete
파일을 삭제합니다.
find . ! -mtime -1 -type f -delete
-not
POSIX 규격이 아닙니다 .
답변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
더 빠르다는 것을 알았습니다.