Bash 스크립트 - .txt 파일의 디렉터리 크기를 어떻게 가져와서 다른 파일에 저장할 수 있나요?

Bash 스크립트 - .txt 파일의 디렉터리 크기를 어떻게 가져와서 다른 파일에 저장할 수 있나요?

몇 주 동안 Linux bash 프로그래밍을 시작했지만 문제로 어려움을 겪고 있습니다. 여러 디렉터리(.txt 파일에 저장된 경로)의 크기를 가져온 다음 다른 파일인 디렉터리 경로에 쓸 수 있는 방법은 무엇입니까? 크기와 해당 디렉토리가 차지하는 전체 크기를 기준으로 합니다. 이미 시도했지만 확실하지 않습니다.

totsize=0
while read -r diretory; do
   size=$(du -ch "$directory")
   echo "$diretory size: $size" > "$homedir/$filename2"
   $totsize += $(du -c "$homedir/$diretorio")
done < "$homedir/diretories.txt"
sudo echo "total size: $totsize" >> "$homedir/$filename2"

미리 감사드립니다(불량한 영어로 죄송합니다)

답변1

파일이나 디렉토리를 이름으로 처리할 때 개행 문자가 아닌 널바이트 문자로 구분하여 처리하는 것이 좋습니다. 공식적으로 파일 이름이기 때문에~할 수 있다개행 문자를 포함합니다. 따라서 개행 문자로 구분된 디렉토리 목록을 작성해서는 안 됩니다.

어쨌든, 이 목록이 있으면 다음을 사용할 수 있습니다.

du -sch --files0-from=dirs.txt
  • -s-d0각 인수에 대한 합계만 요약합니다 .
  • -c총계를 계산합니다.
  • -h이 모든 작업을 사람이 읽을 수 있는 형식으로 수행합니다.
  • --files0-from=dirs.txtnullbyte로 끝나는 주어진 파일에서 파일 이름/디렉터리 이름을 읽습니다.

목록을 사용하면 다음과 같을 것입니다(단, 줄 바꿈이 포함된 파일 이름에는 함정이 있습니다).

tr '\n' '\0' <dirs.txt | du -sch --files0-from=-

답변2

find다음과 결합하여 사용하고 du다음이 포함된 파일로 리디렉션>

sudo find /path/to/topDir -maxdepth 1 -type d  -exec du -sh {} \;  > output.txt

예:

xieerqi:$ sudo find Desktop -maxdepth 1 -type d  -exec du -sh {} \; > outputFile1.txt                                                            
[sudo] password for xieerqi: 

xieerqi:$ cat outputFile1.txt                                                                                                                    
2.7G    Desktop
69M Desktop/linux-kernel-4.1.0
1.1M    Desktop/DOCS
6.8M    Desktop/The comments that became a reporter’s death sentence | New York Post_files
4.0K    Desktop/newdir
6.7M    Desktop/IMAGES
12M Desktop/TIRES
504K    Desktop/MSU-TEMPLATES
341M    Desktop/PDFS
19M Desktop/java

이 명령으로 list의 특정 디렉터리에 대한 디스크 사용량을 제공하려면 cat 및 xargs를 위 명령과 결합하면 됩니다. 예를 들어,

 cat dirList.txt | xargs -I dir sudo find dir -maxdepth 0 -type d  -exec du -sh {} \; 

귀하가 소유자가 아닌 일부 디렉토리는 sudo디스크 사용량을 나열하기 위해 액세스가 필요하므로 이를 sudo sh -c. 제가 보여드리자면,

xieerqi:$ sudo sh -c "cat dirList.txt | xargs -I dir find dir -maxdepth 0 -type d  -exec du -sh {} \+"                                           
[sudo] password for xieerqi: 
2.7G    /home/xieerqi/Desktop
11M /bin
5.5G    /usr

xieerqi:$ cat dirList.txt                                                                                                                        
/home/xieerqi/Desktop
/bin
/usr

답변3

다음과 같은 명령을 사용하여 디렉터리 크기를 얻을 수 있습니다 du.

du -h -d 1 "path to parent directory"

-디:하위 디렉토리의 깊이

관련 정보