찾기 검색 기준을 사용할 때 상위 폴더의 크기를 가져오시겠습니까?

찾기 검색 기준을 사용할 때 상위 폴더의 크기를 가져오시겠습니까?

파일 이름에서 특정 정규식을 찾고 있으며 고유한 방식으로 상위 폴더와 해당 크기를 반환하려고 합니다.

예를 들어, 다음은 내가 작동할 것으로 예상되는 명령입니다.

find -E . -type f -regex '.*[fF][oO][oO].*' -maxdepth 2 | rev | cut -d'/' -f2- | rev | egrep -v '\.$' | uniq | xargs du -sh

xargs: unterminated quote파일 이름의 따옴표가 다르기 때문에 실패합니다.

find그래서 나는 with -print0xargswith 를 사용하게 되었습니다 -0:

find -E . -type f -regex '.*[fF][oO][oO].*' -maxdepth 2 -print0 | rev | cut -d'/' -f2- | rev | egrep -v '\.$' | uniq | xargs -0 du -sh

그러나 결국 오류가 발생했습니다. 이는 분명히 find 형식의 출력을 수정했기 du: Binary file (standard input) matches때문이었습니다 .uniq-print0

상위 폴더 아래에서 일치하는 파일이나 폴더를 검색할 때 상위 폴더 크기를 찾는 것이 어떻게 권장됩니까? 반복합니다. 하위 폴더 경로나 파일 정보 없이 최상위 폴더 이름과 해당 크기( du -sh)만 찾아서 일치하는 기준에 맞는 깔끔한 기본 폴더 목록을 만들고 싶습니다.

답변1

revegrepuniq0을 먹고 선을 봅니다. GNU가 있는 경우find그리고uniq다음과 같이 많이 단순화할 수 있습니다.

find ...tests... -printf '%h\0' | uniq -z | xargs -0 du -sh

GNU find-printf옵션은 각 파일의 출력을 설명하는 형식을 취합니다. %h파일 이름을 포함하지 않는 경로 형식으로, \00으로 종료됩니다. uniq -z각 레코드를 0으로 종료하도록 지시합니다. 그렇지 않으면 하나의 행만 표시되고 본질적으로 이전과 같이 계속될 수 있습니다 cat.xargs

그것은 생각할 수있다sort -z -uuniq순서가 지정되지 않은 이름을 고려하는 것보다 낫습니다. 단, 최대 깊이 요구 사항은 .중간에 있는 항목만 여러 번 표시된다는 의미입니다. -mindepth 2이것도 피할 것입니다.

파일 이름에 0이 없는 경우

답변2

예제 명령의 가장 복잡한 점은 디렉터리 이름을 가져오는 것입니다. -printf옵션을 사용하면 이를 보다 쉽고 직접적으로 달성 할 수 있습니다 find. 디렉토리 작성을 위한 형식이 있습니다: %h. 이것을 사용하면 명령이 많이 단순화됩니다.

디렉토리만 작성하려면 다음을 사용하십시오.

find ... -type f ... -printf '%h\n'

종료된 라인 에도 이것을 사용할 수 있습니다 \0:

find ... -type f ... -printf '%h\0'


\0문제의 두 번째 명령에는 추가 문제가 있습니다. 라인에서 작동하는 명령 파이프라인을 사용하지만 입력은 라인이 아닙니다. 라인 종료 에 사용한 것과 같은 개행 문자가 없습니다 . 즉, 전체 출력이 한 줄에 표시됩니다.

관련 정보