xargs로 출력 찾기 파이핑 시 문제 인용 [중복]

xargs로 출력 찾기 파이핑 시 문제 인용 [중복]

다음 하위 디렉터리를 포함하는 디렉터리가 있습니다. 즉, 다음을 실행하면$ tree -L 1

.
├── 2007-06-20_to_2008-10-01
├── 2008-07-21_to_2008_08_12-Nokia 2mp
├── 2009-11-01_to_2011-01-10 - All iphone Pics
├── 2011-01-01 palliser-pics
├── 2011-03-10_to_2011-04-12-few iphone pics b4 switch to HTC
└── 2011-03-31-to-2013-05-01 ALL HTC pics-backup-prior-to-factory-reset

이 두 디렉터리와 모든 콘텐츠가 차지하는 디스크 공간의 양을 확인하고 싶습니다.
예를 들어 원하는 출력은 다음과 같습니다.

2.7G  2007-06-20_to_2008-10-01
200MB 2008-07-21_to_2008_08_12-Nokia 2mp
1.3G  2009-11-01_to_2011-01-10 - All iphone Pics
667MB 2011-01-01 palliser-pics
2.3G  2011-03-10_to_2011-04-12-few iphone pics b4 switch to HTC
123MB 2011-03-31-to-2013-05-01 ALL HTC pics-backup-prior-to-factory-reset

그래서 나는 다음과 같은 노력을 해왔습니다.

find .  -maxdepth 1 -type d | xargs du -h 

그러나 일부 디렉토리 이름에는 공백이 포함되어 있기 때문에 출력의 각 줄은 find에 전달되기 전에 ' 를 많이 생성합니다. 이 문제를 해결할 수 있는 방법이 있습니까?WORDxargs

rename문제의 근본 원인이 파일의 공백으로 인해 발생한다는 것을 알고 있습니다. 를 사용하여 디스크 크기를 얻는 방법을 찾을 수 없으면 du다음을 사용하여 문제를 해결하겠습니다.findxargs

답변1

find | xargs-print0-0항상 다음 설명과 함께 및 와 함께 사용해야 합니다 man find.

   -print0
          True; print the full file name on the standard output, followed
          by a null character (instead of the newline character that
          -print uses).  This allows file names that contain newlines or
          other types of white space to be correctly interpreted by
          programs that process the find output.  This option corresponds
          to the -0 option of xargs.

그래서 당신은 다음을 원합니다: 완전히 진화된 셸이
find . -mindepth 1 -maxdepth 1 -type d -print0 | xargs -0 du -sh
있거나 없는 경우 ( ): 더 간단한 방향으로 안내합니다.findzsh
print -N *(/) | xargs -0 du -sh

du -sh *(/)

관련 정보