먼저, 2012년 12월의 파일만 표시하는 FIND 명령을 사용하여 파일을 검색해야 했습니다.
두 번째로 검색된 파일의 전체 크기를 확인해야 합니다.
이 명령을 사용했습니다
find /storage/backup/rman/ -mtime +90 -mtime -120 -exec ls -lrth {} \;
하지만 내가 원하지 않는 11월 파일도 제공됩니다.
-rw-r--r-- 1 oraprod dba 8.7K Dec 1 22:40 /storage/backup/rman/full_011212.log
-rw-r----- 1 oraprod dba 3.3G Dec 11 22:34 /storage/backup/rman/BKPPROD_aknskgvb.F_bkp
-rw-r----- 1 oraprod dba 34M Dec 1 22:40 /storage/backup/rman/ctrl_011223
-rw-r----- 1 oraprod dba 1.3M Dec 1 22:33 /storage/backup/rman/BKPPROD_8lnrq765.F_bkp
-rw-r--r-- 1 oraprod dba 8.0K Dec 20 22:45 /storage/backup/rman/full_201212.log
-rw-r----- 1 oraprod dba 34M Dec 2 22:42 /storage/backup/rman/ctrl_021223
-rw-r----- 1 oraprod dba 2.5G Dec 11 22:38 /storage/backup/rman/BKPPROD_ajnskgvb.F_bkp
-rw-r----- 1 oraprod dba 34M Dec 13 22:46 /storage/backup/rman/ctrl_131223
-rw-r--r-- 1 oraprod dba 8.0K Dec 17 22:44 /storage/backup/rman/full_171212.log
-rw-r--r-- 1 oraprod dba 8.0K Dec 10 22:38 /storage/backup/rman/full_101212.log
-rw-r--r-- 1 oraprod dba 8.0K Dec 13 22:46 /storage/backup/rman/full_131212.log
-rw-r--r-- 1 oraprod dba 1.4K Nov 30 22:00 /storage/backup/rman/full_301112.log
-rw-r----- 1 oraprod dba 34M Dec 8 22:46 /storage/backup/rman/ctrl_081223
-rw-r--r-- 1 oraprod dba 9.2K Dec 12 22:43 /storage/backup/rman/full_121212.log
명령 끝에 전달하면 du -ch
결과는 다음과 같습니다.
8.0K ./.gnome/gnome-vfs
12K ./.gnome
24K ./lsat-0.9.7.1/changelog
920K ./lsat-0.9.7.1
8.0K ./.gconf/desktop/gnome/accessibility/keyboard
12K ./.gconf/desktop/gnome/accessibility
8.0K ./.gconf/desktop/gnome/peripherals/keyboard/host-mdfr-prod/0
12K ./.gconf/desktop/gnome/peripherals/keyboard/host-mdfr-prod
16K ./.gconf/desktop/gnome/peripherals/keyboard
20K ./.gconf/desktop/gnome/peripherals
36K ./.gconf/desktop/gnome
40K ./.gconf/desktop
8.0K ./.gconf/apps/panel/applets/clock/prefs
12K ./.gconf/apps/panel/applets/clock
8.0K ./.gconf/apps/panel/applets/workspace_switcher/prefs
12K ./.gconf/apps/panel/applets/workspace_switcher
8.0K ./.gconf/apps/panel/applets/window_list/prefs
12K ./.gconf/apps/panel/applets/window_list
40K ./.gconf/apps/panel/applets
44K ./.gconf/apps/panel
8.0K ./.gconf/apps/puplet
56K ./.gconf/apps
100K ./.gconf
8.0K ./.nautilus/metafiles
12K ./.nautilus
4.0K ./.eggcups
196K ./.gstreamer-0.10
4.0K ./.redhat/esc
8.0K ./.redhat
8.0K ./.gnome2/share/cursor-fonts
8.0K ./.gnome2/share/fonts
20K ./.gnome2/share
4.0K ./.gnome2/keyrings
4.0K ./.gnome2/accels
4.0K ./.gnome2/nautilus-scripts
36K ./.gnome2
12K ./.metacity/sessions
16K ./.metacity
4.0K ./.Trash
4.0K ./.gnome2_private
68K ./.gconfd
4.0K ./.mozilla/extensions
4.0K ./.mozilla/plugins
12K ./.mozilla
4.0K ./Desktop
2.5M .
2.5M total
답변1
일부 버전 find
(포함되지 않은 Linux, Cygwin, OSX, FreeBSD)에서는 연산자를 사용하여 파일 수정 시간을 참조 날짜와 비교할 수 있습니다 -newermt
.
find /storage/backup/rman -newermt '2012-12-01' ! -newermt '2013-01-01'
-mtime
이 연산자는 명령을 실행한 시간과 관련이 있기 때문에 이 연산자를 사용하여 특정 날짜에 파일이 수정되었는지 알 수 없습니다 find
. 연산자가 find
없으면 참조 파일을 만들고 연산자를 사용하십시오.-newermt
-newer
touch -t 201212010000 start
touch -t 201301010000 end
find /storage/backup/rman -newer start ! -newer end
파일의 전체 크기를 얻으려면 du -c
마지막 줄("total")만 사용하고 유지하세요. 디렉토리를 전달하면 du
해당 디렉토리 아래에 있는 모든 파일의 크기가 합산되므로 디렉토리를 제외해야 합니다.
find /storage/backup/rman -type f -newermt '2012-12-01' ! -newermt '2013-01-01' -exec du -c {} + | tail -n 1
파일 수가 많은 경우 명령줄의 길이가 너무 길어질 수 있으므로 여러 번 find
실행되며 du
위 명령은 마지막 배치의 출력만 나열합니다. 이 경우 각 실행에 대한 금액을 합산해야 합니다. 이를 수행하는 한 가지 방법이 있습니다.
find /storage/backup/rman -type f -newermt '2012-12-01' ! -newermt '2013-01-01' \
-exec sh -c 'du "$@" | tail -n 1' _ {} + |
awk '{total += $1} END {print total}'
연습: 다음 명령의 문제점은 무엇입니까? (예: 일반적이지는 않지만 가능한 상황에서 잘못된 번호를 보고하게 됩니까?)
find /storage/backup/rman -type f -newermt '2012-12-01' ! -newermt '2013-01-01' \
-exec du {} + |
awk '$2 == "total" {total += $1} END {print total}'
답변2
먼저 파일 크기를 바이트 단위로 검색한 다음 함께 추가합니다.
sed 's/\s\+/+/g' <<<$(find /storage/backup/rman/ -mtime +90 -mtime -120 -exec stat -c "%s" {} \;) | bc
편집하다
이러한 파일을 보려면,
du -chs $(find /storage/backup/rman/ -mtime +90 -mtime -120)
답변3
find . -name '*.ear' -exec ls -lh {} \;
jer.drab.org의 답변에서 추가 내용을 확인하세요. 정신적으로 MB로 변환하는 시간을 절약하세요.
관련 리소스
답변4
두 번째 요청(파일 크기 요약)에는 다음을 사용하고 있습니다.
find /storage/backup/rman/ -mtime +90 -mtime -120 -printf '%s\n' \
| awk '{total += $1} END {printf "%.17g\n", total}'
-printf '%s\n'
인쇄 크기만(GNU 구현 필요find
)- awk는 수학적 계산을 수행합니다.
printf "%.17g\n"
과학적 표기법을 피하세요
작동하는지 확인하세요.
fallocate -l 1M ./1m.txt
fallocate -l 2M ./2m.txt
echo $(($(stat -c '%s' ./1m.txt) + $(stat -c '%s' ./2m.txt)))
3145728
find ~/ -name '?m.txt' -printf '%s\n' \
| awk '{total += $1} END {printf "%.17g\n", total}'
3145728
인용하다: