데이터베이스가 하루에 생성하는 아카이브 로그 수를 확인하고 싶어서 다음과 같이 했습니다.
find /u02/archivelog -mmin -1440 | du -sh
220GB를 얻었습니다. 이는 해당 디렉터리에 있는 모든 파일의 총 크기이며, 하루도 채 지나지 않아 전체 크기가 아닙니다.
이렇게 하면 find /u02/archivelog -mmin -1440 -exec ls -ltrh {} \;
작동하고 1일 미만의 파일만 나열됩니다. 하지만 이 논리는 적용되지 않는 것 같습니다 du
.
예상되는 결과를 얻으려면 구문을 어떻게 개선해야 합니까?
답변1
du는 파이프로 연결된 파일을 허용하지 않는 것 같습니다. 내 생각에 당신이 찾고 있는 것은
find /u02/archivelog -type f -mmin -1440 -exec du -ch {} +
+
대신 사용하면 find가 목록으로 ;
작성되어 각 일치 항목에 대해 한 번이 아니라 한 번 실행됩니다. {}
또한 사용해야 합니다 -type f
. 그렇지 않으면 새 파일이 추가될 때마다 수정되는 디렉터리 자체와 일치하게 됩니다. du에 디렉토리 자체를 포함시키면 모든 파일의 크기를 다시 얻게 됩니다. -c
du에 "master" 줄도 표시하도록 만드세요 . 합계만 원할 경우 | tail -1
끝에 추가할 수 있습니다.
답변2
귀하의 사용은 {} \;
인수를 ls
하나의 요소로 제한합니다. 보관된 로그의 총 수에 관심이 있는 경우 다음을 사용할 수 있습니다.
find /u02/archivelog -mmin -1440 -type f -exec wc -c {} + | tail -1
이 디렉터리에 있는 파일의 총 바이트 수를 가져옵니다.
시스템이 허용하는 한 많은 파일 이름을 명령줄에 입력하십시오 {} +
(따라서 파일이 많거나 파일 이름이 매우 긴 경우 wc
여러 번 호출될 가능성이 있습니다).wc