du 명령 - 출력에 파일이나 폴더를 표시하시겠습니까?

du 명령 - 출력에 파일이나 폴더를 표시하시겠습니까?

명령을 실행하면 du -ah | sort -nr출력의 어떤 줄이 파일이고 어떤 폴더인지 표시하도록 할 수 있습니까? 명령과 같은 것은 앞에 ls -l파일과 폴더가 무엇인지 보여줍니다 .d-

답변1

그것은 일종의 가능하지만 다른 명령의 도움 없이는 불가능합니다. 구체적으로 여기서는 GNU awk를 사용하고 있습니다(중요하므로 awk 버전을 확인하세요).

$ du -ah | sort -nr | awk '{usage=$1; $1="";cmd="file "$0;cmd |& getline type;print usage,type ;close(cmd)}'             
24K .: directory
4.0K ./testdir: directory
4.0K ./out.txt: ASCII text
4.0K ./3.txt: ASCII text
4.0K ./2.txt: ASCII text
4.0K ./1.txt: ASCII text

물론 이 접근 방식은 공백이 포함된 파일 이름에서는 실패하는 것처럼 보이기 때문에 약간의 결함이 있습니다(아직 개선 작업 중).

대안으로 find명령을 사용하여 모든 파일을 찾고 명령을 실행하여 file플래그 를 du통해 입찰을 수행할 수도 -exec있지만 약간 보기 흉해 보입니다(편집 기록 참조). 그러나 훨씬 더 멋진 출력을 위한 형식 으로 파일 형식을 인쇄하려면 의 플래그를 find사용할 수 있습니다 .-printf%y

$ find -mindepth 1 -printf "%y\t" -exec  du "{}" \;  | sort -rn                                       
f   4   ./out.txt
f   4   ./3.txt
f   4   ./2.txt
f   4   ./1.txt
f   0   ./with space.txt
d   4   ./testdir

분명히 여기는 f일반 파일용이고 d디렉토리용입니다. find플래그 및 파일 형식 문자에 대한 자세한 내용은 의 매뉴얼을 참조하세요 .

답변2

Serg가 말했듯 du이 이 작업은 스스로 수행할 수 없습니다. 파일 이름을 안전하게 처리하려면 가장 좋은 방법은 ASCII 널 문자( \0) 로 구분하는 du것 입니다.저것. 따라서 이를 null로 구분된 입력을 처리하는 기능과 함께 ' sort사용 합니다.xargs

du -0ah |
  sort -zh |
  xargs -0 sh -c 'for i; do s=${i%%[[:space:]]*};f=${i#*[[:space:]]}; echo "$s" "$(ls --color -dF "$f")"; done' _

-0, -z-0옵션은 , dusort구분 xargs기호로 ASCII nul을 사용하도록 지시합니다.

그런 다음 s=${i%[[:space:]]*}공백(크기)까지 줄의 시작을 가져오고 f=${i#*[[:space:]]}다른 모든 것(파일 이름)을 가져옵니다. 그런 다음 ls장식을 사용하여 파일 이름을 인쇄합니다.

예:

$ du -0ah Screenshots | sort -zh | xargs -0 sh -c 'for i; do s=${i%%[[:space:]]*};f=${i#*[[:space:]]}; echo "$s" "$(ls --color -dF "$f")"; done' _
512 Screenshots/desktop.ini*
264K Screenshots/Screenshot (1).png*
269K Screenshots/

을 사용했기 때문에 ls --color멋진 색상 출력도 얻을 수 있습니다.

여기에 이미지 설명을 입력하세요

관련 정보