디렉토리에 있는 파일의 전체 크기를 찾는 방법

디렉토리에 있는 파일의 전체 크기를 찾는 방법

directory1그래서 directory2. 그러나 내 코드에 따르면 이 작업은 디렉터리의 한 파일에 대해서만 수행됩니다. 여러 파일에 대해 작동하게 하려면 어떻게 해야 합니까? 아래 코드에서 문제가 발견되었습니다.

#!/bin/bash
dir1=$1
dir2=$2

echo Files that are included only in directory1 and not in directory2
diff $dir1 $dir2 | egrep $dir1 | wc -l
diff $dir1 $dir2 | egrep $dir1 
files=$(diff $dir1 $dir2 |egrep $dir1 |awk '{print $4}')
ls -l ./$dir1/$files | awk '{t+=$5}END{print t}'

답변1

최고의 용도 du:

du -s directory모든 파일 및 하위 디렉터리에서 사용되는 크기를 보고합니다. 를 사용하여 du제외 목록을 제공할 수 있으므로 귀하의 경우 이 제외 목록은 를 사용하여 쉽게 얻을 수 있는 --exclude-from파일 이름이 됩니다 . 파일이 필요하지만 실제 파일을 만들 필요는 없으며 "프로세스 대체"를 사용할 수 있습니다. 함께 넣어보세요:dir2basename -a dir2/*--exclude-from

du --exclude-from <(basename -a dir2/*) -s dir1 

크기를 바이트, KB 또는 MB 단위로 보고하는 옵션이 있으며 , 디스크 사용량(기본값) 또는 보고서 크기 (스파스 파일의 경우 다름) du를 보고하도록 요청할 수도 있습니다 .ls

예를 들어 다음과 같이 시작합니다.

├── dir1
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
└── dir2
    ├── file5
    └── file6

du -c dir1/*보고서:

10240   dir1/file1
10240   dir1/file2
10240   dir1/file3
10240   dir1/file4
51200   dir1/file5
92160   total

제외된 dir2파일은 제외되므로 file5크기를 50MB 줄여야 합니다.

> du --exclude-from <(basename -a dir2/*) -s dir1
40964   dir1

관련 정보