각각 일부 파일을 포함하는 여러 하위 디렉터리가 있는 디렉터리가 있다고 가정해 보겠습니다.
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 {} \;