/home/abdul/backup
지난 1년간의 파일이 포함된 폴더가 있다고 가정해 보겠습니다 .gz
. 내 요구 사항은 지난 7일의 크기를 가져오는 것입니다...
답변1
find /home/abdul/backup -daystart -name '*.gz' -mtime -7 -exec du -h '{}' ';'
작동 방식:
find
- 주석에 적힌 내용이 나와 있습니다. 사용 중인 OS를 지정하지 않았으므로 GNU find에 액세스할 수 있다고 가정합니다.
/home/abdul/backup
- 시작 디렉토리
-daystart
- 하루를 시작한 이후의 시간을 측정합니다(원하는 결과일 수도 있고 아닐 수도 있음).
-name '*.gz'
- 이름이 .gz
(또는 더 정확하게는 match )로 끝나는 파일만 고려합니다.*.gz
-mtime -7
- 파일 마지막 수정 시간7*24시간, -daystart를 고려
-exec du -h '{}' ';'
- du
사람이 읽을 수 있는 단위로 지정된 파일 크기의 인쇄를 수행합니다( {}
해당 파일 이름으로 확장됨).
삭제된 모든 파일이 나열됩니다.수정됨지난 7일 이내. 실행 중인 특정 운영 체제 및 파일 시스템에 따라 파일이 생성된 시기를 확인할 수 있지만 많은 *nix 시스템은 파일이 원래 생성된 시기 또는 "생성된" 시기를 추적하지 않습니다.
답변2
find . -ctime -7 | xargs ls -l | awk '{ TOTAL += $5;} END{print TOTAL;}'
그러면 현재 디렉터리에서 7*24시간 이내에 생성된 파일이 먼저 나열되고 해당 파일의 크기를 바이트 단위로 가져와 요약한 후 결과를 제공합니다.
답변3
파일 이름에 공백이나 기타 이상한 문자가 포함되어 있지 않으면 다음과 같이 할 수 있습니다.
du -sch "$(find /home/abdul/backup -name '*.gz' -mtime +7) "
공백 및 기타 이상한 문자의 경우 다음을 사용하십시오.
find /home/abdul/backup -name '*.gz' -mtime -7 -print0 | xargs -0 du -sch
당신이 가지고 있다면많은위의 두 명령 모두 기준과 일치하는 파일에 대해 실패합니다. 첫 번째는 파일 목록이 너무 길기 때문이고, 두 번째는 xargs
여러 명령으로 분할되어 각 하위 집합에 대한 합계를 반환하기 때문입니다.
이러한 문제를 피하기 위한 또 다른 해결책은 다음과 같습니다(Paulo Almeida에게 감사드립니다).논평말하는):
find /home/abdul/backup -name '*.gz' -mtime -7 -print0 | du -sch --files0-from -
에서 man du
:
--files0-from=F
summarize disk usage of the NUL-terminated
file names specified in file F; If F is - then
read names from standard input