
와일드카드가 포함된 파일 및 디렉터리 목록이 있는 파일이 있습니다 *
. 항목의 크기를 출력하려고 하는데 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 패턴 중 일치하는 파일이 없는 경우 해당 설정이 필요합니다.