몇 주 동안 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.txt
nullbyte로 끝나는 주어진 파일에서 파일 이름/디렉터리 이름을 읽습니다.
목록을 사용하면 다음과 같을 것입니다(단, 줄 바꿈이 포함된 파일 이름에는 함정이 있습니다).
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"
-디:하위 디렉토리의 깊이