명령 출력에서 ​​공백이 포함된 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이러한 du작업을 수행한 후 명령을 전달한 sort-ed다음while/read

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

관련 정보