우리 시스템에는 4년 이상의 데이터가 있습니다. 2년 전의 파일과 디렉터리를 새 저장소로 이동해야 합니다. 우리의 요구 사항은 2017년 1월부터 현재까지의 데이터가 몇 테라바이트인지 아는 것입니다. 2. 개인 폴더 제외 명령을 찾으려고 했지만 찾을 수 없습니다.
find . -type f -mtime +1010 ! -path "./home/01_Personal Folder*" -printf '%s\n' \
| awk '{a+=$1;} END {printf "%.1f GB\n", a/2**30;}'
답변1
다음과 같이 보일 수 있습니다:
find . ! -path "./home/01_Personal Folder*" -type f -mtime +1000 -exec du -ch {} + | grep total
대답은 다음을 기반으로 합니다.디렉토리 분기에 있는 특정 파일의 전체 크기 찾기
쉘을 설명하라주문하다.
답변2
...
37M total
29M total
42M total
43M total
36M total
real 0m1.271s
user 0m0.561s
sys 0m1.278s
내가 얻는 것은 다음과 같습니다.
time find ~/sda1 -type f -exec du -ch {} +|grep total
이제 총계를 합산하는 도구가 필요합니다! (이것은 -exec...+
오버플로입니다)
하지만 함께:
time find ~/sda1 -type f -printf "%s\n" | awk '{a+=$1;} END {print a;}'
10483650002
real 0m0.550s
user 0m0.251s
sys 0m0.349s
그리고:
]# time du ~/sda1 -sh
11G /.../sda1
real 0m0.458s
user 0m0.116s
sys 0m0.340s
빠르고 친절하게 잘 받았습니다.
du
find가 어쨌든 모든 파일을 찾고 stat
크기를 무료로 제공하는 것은 비효율적입니다. -c "total"로 다운그레이드된 find ... -exec du {} +
계산기 를 사용하세요 .du
물론 파일 크기(바이트 단위)와 디스크 사용량(블록 단위)에는 약간의 차이가 있습니다.
이는 원래 `find ... -printf "%s\n" | awk '{...} END {...}' 작동 방식을 설명하기 위한 것입니다.
]# find ~ -maxdepth 1 -printf "%s\n" | awk '{a+=$1;} END {print a;}'
1093990
]# find ~ -maxdepth 1 -printf "%s\n" | awk '{a+=$1;} END {printf "%x\n",a;}'
10b166
이번이 처음입니다 awk
.
나는 이것을 에서 테스트했고 ~ -maxdepth 1
OP 끝에 있는 "GB"라는 정수가 나에게 충격을 주었기 때문에 10**6 = 16x64K를 얻을 때까지 놀았습니다.