모든 확장된 입력 줄에서 xargs 유틸리티를 실행하는 방법은 무엇입니까?

모든 확장된 입력 줄에서 xargs 유틸리티를 실행하는 방법은 무엇입니까?

와일드카드가 포함된 파일 및 디렉터리 목록이 있는 파일이 있습니다 *. 항목의 크기를 출력하려고 하는데 du총계를 원합니다.

내가 시작하는 경우 :

cat file | xargs du -hs

와일드카드는 *확장되지 않습니다. 그렇게 하기 위해 나는 다음을 수행합니다:

cat file | xargs -I@ sh -c 'du -hs @'

하지만 내가 시도하면:

cat file | xargs -I@ sh -c 'du -hsc @'

나는 총계를 얻습니다(확장) 파일 항목입니다. 파일이 다음과 같은 경우:

foo*
bar*

나는 얻을 것이다:

1K foo1
1K foo2
2K total
1K bar1
1K bar2
2K total

파일에 있는 모든 항목의 총계를 어떻게 얻나요? du모든 라인에 대해 한 번만 실행하려면 어떻게 해야 합니까 ? 감사해요

답변1

cat file | xargs -I@ sh -c 'echo @' | xargs du -hsc

답변2

xargs가 필요하지 않은 경우 다음을 사용하여 총계도 생성됩니다 du.

du -hsc ${(f)~"$(<file)"}

이는 file한 줄에 하나의 glob 패턴이 있다고 가정하고 (f)확장 플래그를 사용하여 입력을 줄로 분할합니다. 패턴과 파일 이름 모두 공백을 포함할 수 있습니다. 확장 GLOB_SUBST( ${~...})은 zsh입력에서 와일드카드를 처리하도록 지시합니다.

패턴이 공백으로 구분된 경우에는 플래그 (f)가 필요하지 않습니다.

setopt nullglob
du -hsc ${~$(<file)}

옵션 을 설정합니다 NULL_GLOB. glob 패턴 중 일치하는 파일이 없는 경우 해당 설정이 필요합니다.

관련 정보