명령 출력에서 ​​공백이 포함된 Unix 호환 파일 경로 추출

명령 출력에서 ​​공백이 포함된 Unix 호환 파일 경로 추출

명령 :

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마친 후 명령을 사용하는 것입니다 .dusort-edwhile/read

du.. sort.. | while read x d; do echo "$d"; done

관련 정보