파일 및 디렉터리 목록을 du로 파이프하여 디렉터리 크기만 표시하시겠습니까?

파일 및 디렉터리 목록을 du로 파이프하여 디렉터리 크기만 표시하시겠습니까?

각각 일부 파일을 포함하는 여러 하위 디렉터리가 있는 디렉터리가 있다고 가정해 보겠습니다.

1/a.txt
1/b.txt
2/c.txt
2/d.txt
3/e.txt
3/f.txt

각 파일의 크기를 보고 싶습니다. 이를 수행하는 더 간단하고 직접적인 방법이 있다는 것을 명심하십시오 du -a. 예를 들어 . 교육 목적으로 다음이 작동하지 않는 이유가 궁금합니다.


내 무의미한 운동

실행하면 find .모든 파일과 디렉터리 목록이 반환되므로 다음과 같이 파이핑해 보았습니다.

find . | xargs du

그러나 이는 디렉터리 1, 2, 3의 크기만 반환합니다. xargs출력의 각 find줄 이 du.


내가 사용하는 경우:

find . | xargs du -a

그런 다음 예상대로 작동하여 모든 파일과 디렉터리의 크기를 나열합니다. 해당 옵션을 사용하여 파일 목록을 전달하는 경우 -type f에도 잘 작동하므로 이는 파일과 혼합된 디렉터리 목록을 받는 것과 관련이 있습니다.

여기서 무슨 일이 일어나고 있는 걸까요?

답변1

가능한 경우 xargs모든 이름을 하나의 명령줄에 입력하여 에 전달된 파일만 볼 수 있습니다 du. 그런 다음 du파일 이름은 무시됩니다(예상할 수 있듯이 파일은 디렉터리의 일부이므로 전달되지 않습니다). 두 번 계산합니다).

-n 1매개변수를 사용하면 xargs명령이 분리되어 예상한 내용이 더 많이 표시됩니다.

find . | xargs -n 1 du -a

답변2

다음 명령을 사용할 수 있습니다

  find path -type f -printf "%s %p\n"

답변3

-exec이 기능은 다음에서 사용할 수 있습니다 find.

find . -type f -exec du -h {} \;

관련 정보