명령 :
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1
나에게주고있다 :
41G /Users/user/Big folder
내 스크립트에서 재사용할 경로를 어떻게 추출할 수 있나요?
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1 | awk '{ print $2 }'
출력됩니다
/Users/user/Big
사용할 수 없습니다. 여기서 다음과 같은 결과를 찾고 있습니다.
/Users/user/Big\ folder
답변1
자동화된 처리를 할 때, 다른 단위의 숫자를 사용하여 생활을 더 복잡하게 만들지 마십시오. -h
에 전달하지 마십시오 du
. 그런 다음 출력에 대해 간단한 숫자 정렬을 사용할 수 있으며 디렉터리 중 하나에 1TB 이상이 있어도 스크립트가 계속 작동합니다.
du -s ~/* | sort -k 1n | tail -n1
가장 큰 하위 디렉터리에 1GB 미만이 포함되어 있어도 항상 한 줄을 인쇄합니다. 이것이 원하는 것이 아니라면 조건부 "출력이 비어 있습니다"를 "임계값보다 작은 숫자입니다"로 바꿀 수 있습니다.
디렉터리 이름을 추출하려면 출력을 가져와 첫 번째 탭까지 해당 부분을 제거합니다.
largest_directory=$(du -s ~/* | sort -k 1n | tail -n1)
largest_directory_size_kB=${largest_directory%%$(printf '\t')*} # if you need the size
largest_directory=${largest_directory#*$(printf '\t')}
답변2
긍정적으로:
du -s "$HOME"/* | sort -rnk1 | LC_ALL=C sed -e "s,[^/]*\(/.*\),'\1',;q"
-h
이 없으면 du
결과에 크기에 대한 일반 숫자가 포함되므로 추가 없이 쉽게 정렬할 수 있습니다 grep
.
를 사용하여 sed
첫 번째 줄에서만 삭제를 수행한 다음 종료하면 head
호출을 저장합니다.
답변3
원하는 경로를 추출하는 또 다른 방법은 작업을 read
마친 후 명령을 사용하는 것입니다 .du
sort-ed
while/read
du.. sort.. | while read x d; do echo "$d"; done