2014-01-24 6 views
2

find, xargs 및 du를 사용하여 파일을 찾고 크기를 인쇄하는 명령이 생겼습니다. 존재하지 않는 것을 검색 할 때 문제가 있습니다. xargs 메서드를 사용하여 du는 무언가가 존재하지 않을 때 모든 폴더를보고하지만 아무 것도 발견되지 않아 아무것도보고하지 않기를 기대합니다. -exec 메서드를 사용하면 올바르게 작동하지만 더 큰 검색에서 읽고 관찰 한 결과 파일 그룹에서 작동하는 대신 발견 된 각 파일에 대해 du 명령을 반복하기 때문에 효율성이 떨어집니다. 그것이 언급되는 섹션을 참조하십시오 : - 삭제 : http://content.hccfl.edu/pollock/unix/findcmd.htmpipeing empty xargs에서 du로 결과를 찾지 못하면 예기치 않은 동작이 발생합니다.

다음은 예입니다. 첫째,이 디렉토리에있는 것입니다 : 여기

find . -name '*.foo' -type f -print0 | xargs -0 du -h
4.0K ./test2.foo
4.0K ./test1.foo
4.0K ./test3.foo

find . -name '*.bar' -type f -print0 | xargs -0 du -h
4.0K ./bar_dir/test1.bar
4.0K ./bar_dir/test2.bar
4.0K ./bar_dir/test3.bar

: 나는 결과를 찾아 낼 것으로 예상 곳에

ls
bar_dir/ test1.foo test2.foo test3.foo

다음

ls bar_dir
test1.bar test2.bar test3.bar

두 검색이 내가 아무 결과도 기대하지 않는 검색이지만 대신에

find . -name '*.qux' -type f -print0 | xargs -0 du -h
16K ./bar_dir
32K .

난 그냥 찾아 사용하는 경우, 그것은 (예상대로)

find . -name '*.qux' -print0

을 아무 것도 반환하지 않습니다 그리고 난 뒤의 간부 인 방법을 사용하는 경우, 그것은 또한 : 디렉토리의 목록을 얻을 (예상대로) 아무것도

find . -name '*.qux' -type f -exec du -h '{}' \;

그래서 문제 무엇을 반환 find가 아무 것도 찾지 못할 때 xargs du 방법을 사용합니까? 시간 내 줘서 고마워.

답변

0

du --files0-from -을 보셨습니까?

man du

--files0-from=F 
      summarize disk usage of the NUL-terminated file names specified in file F; If F is - then read names from standard input 

에서 다음과 같이하십시오 :

이것은 사소한 편집 작동
find . -name '*.qux' -type f -print0 | du -h --files0-from - 
+0

...은'-I'과'{사이에 공백을 추가}' :'찾기. -name '* .qux'-type f -print0 | xargs -0 -I {} du -h {}'고마워! 부수적으로, 나는'-print0'과'-0'없이 원래의 코드를 시도했고 디렉토리는 여전히 반환되었다. 이 코드는'find. -name '* .qux'-type f -print | xargs du -h'는 여전히 작동하지 않습니다. –

+0

@mixed_signals : 죄송합니다. 더 나은 해결책을 위해 편집되었습니다. IMO – grebneke

+0

다음과 같이 작동합니다 :'find. -name '* .qux'-type f -print0 | du -h --files0-from -' 나는이 두 가지 해결책을 읽을 것입니다. 다시 한 번 감사드립니다! –