.stversions
특정 이름(예:)을 가진 모든 디렉토리를 찾고 크기별로 정렬된 목록을 얻고 싶습니다 . find -name .stversions
디렉토리를 가져오고 du -hd1
각 디렉토리의 크기를 결정하고 다음 sort -h
을 사용하여 한 줄 명령에 넣을 수는 없습니다.
find -name .stversions | du -hd1 | sort -h
디렉터리를 선택하지 않는 것 같지만(명령은 단독으로 실행됨) 권한 거부에 대한 불만이 제기된 후 현재 디렉터리의 디렉터리 크기를 결정하고 정렬된 출력을 생성합니다. 출력 find
을 에서 파이프로 연결하는 방법은 무엇입니까 du
?
답변1
표준 du
명령에는 입력이 필요하지 않습니다.표준 입력따라서 파이프로 연결해도 아무런 효과가 없습니다. (또한 처리하지 않습니다 -h
. -d1
) GNU 버전은 NUL로 구분된 파일 목록을 허용합니다(참고자료 참조 man du
).
GNU를 사용하려는 경우 du
파이프 전체에 NUL 종료 레코드를 사용할 수도 있습니다. 이렇게 하면 예기치 않은 문자(공백 포함)가 포함된 파일 이름(디렉터리 이름)을 처리할 수 있습니다.
find -type d -name '.stversions' -print0 | du -h -d1 --files-from0 - -0 | sort -z -h | tr '\0' '\n'
답변2
du
텍스트 스트림을 처리하지 않으며 파일 이름 목록이 필요합니다. 즉, 해당 스트림에 파일 이름이 포함되어 있더라도 읽을 수 없기 때문에 텍스트 스트림을 단순히 파이프로 연결할 수 없다는 의미입니다. 따라서 두 가지 주요 옵션이 있습니다. i) xargs
이런 종류의 도구를 사용하거나 ii) 파일 이름을 반복하여 전달하는 것 중 가장 간단한 방법입니다 du
.xargs
find -name '.stversions' | xargs du -hd1 | sort -h
그러나 경로에 공백 문자가 있는 경우 이 방법은 실패합니다. 더 강력한 솔루션은엠마 루오의 답변, 또는 GNU 도구를 사용하십시오.
find -type d -name '.stversions' -print0 | xargs -0 du -hd1 | sort -h