'du'와 'tree'의 장점을 결합


21

'du'의 정직함과 'tree'의 들여 쓰기 된 형식을 결합 할 수 있는지 궁금합니다. 디렉토리 크기 목록을 원할 경우 :

du -hx -d2

... 두 레벨을 깊이 표시하고 모든 크기 요약은 정직하지만 하위 디렉토리는 들여 쓰기가 없습니다. 반면에 :

tree --du -shaC -L 2

... 잘 들여 들여 쓰기를하지만보고 된 크기는 거짓말입니다. 실제 크기를 얻으려면 다음을 수행해야합니다.

tree --du -shaC

... 즉, 'tree'가 전체 디렉토리 구조를 보여 주면 실제 크기 만 가져옵니다. 실제로 표시하려는 하위 디렉토리의 수에 관계없이 항상 정확한 크기 요약을 가질 수 있기를 원합니다. 나는 종종 이것을한다 :

tree -du -shaC | grep "\[01;34m"

... 디렉토리를 제외한 모든 것을 제거하고 멋지게 들여 쓰기 ...하지만 디스플레이를 주어진 수 수준 (요약을 놓지 않고)으로 제한하는 쉬운 방법은 없습니다. 방법이 있습니까? 아마도 올바른 스위치를 놓쳤습니다 ...

답변:


8

ncdu 도 확인 하십시오 : http://dev.yorhel.nl/ncdu

이 페이지에는 다른 "유사한 프로젝트"도 나와 있습니다.

gt5-ncdu와 매우 유사하지만 다른 접근 방식.

tdu-또 다른 작은 ncurses 기반 디스크 사용 시각화 유틸리티.

TreeSize-GTK (트 리뷰 사용)

Baobab-GTK, 파이 차트, 트 리뷰 및 트리 맵을 사용합니다. 그놈과 함께 제공됩니다.

GdMap-GTK, 트리 맵 디스플레이.

Filelight-파이 차트를 사용하는 KDE

KDirStat-트리 맵 디스플레이가있는 KDE.

QDiskUsage-파이 차트를 사용하는 Qt.

xdiskusage-트리 맵 표시가있는 FLTK.

fsv-3D 시각화

Philesight-Filelight의 웹 기반 복제본.


1
고마워 데이빗, 마침내 그것들을 보러 갔다. 나는 ncdu를 골랐다.
Ray Andrews

@David tdu는 어디에서 왔습니까?
shiish

@shirish 위에서 언급 한 내 소스를 참조하십시오
David Potočnik

11

색상 코드를 grep하지 않아도됩니다 . -d옵션은 list directories only입니다.

이것은 당신이 원하는 것을하는 것 같습니다 :

$ tree --du -d -shaC | grep -Ev '(  *[^ ]* ){2}\['
.
├── [  18]  dir1
├── [  30]  dir2
├── [ 205]  junk
│   ├── [  18]  dir1
│   ├── [  30]  dir2
│   └── [  76]  dir3
├── [ 119]  merge
└── [  20]  stuff

 4.4K used in 10 directories

grep명령은 공백이 하나 뒤에 있고 공백이 아닌 공백이 뒤 따르는 모든 행을 두 번 제거한 다음 a를 제거 [합니다.

당신은 하나의 깊이를 원하는 경우에 {} 중괄호 바운드 수를 변경 {1}하기보다는 {2}. 3의 깊이를 원한다면 동일하게 변경하십시오 {3}.

이것을 다음과 같이 쉘 함수로 바꿀 수 있습니다.

mytreedu() {
  local depth=''

  while getopts "L:" opt ; do
      case "$opt" in
          L) depth="$OPTARG" ;;
      esac
  done

  shift "$((OPTIND-1))"

  if [ -z "$depth" ] ; then
      tree --du -d -shaC "$@"
  else   
      local PATTERN='(  *[^ ]* ){'"$depth"'}\['
      tree --du -d -shaC "$@" | grep -Ev "$PATTERN"
  fi
}

이것은 옵션과 옵션 이있는 경우 명령 행 에서 옵션과 인수 getopts를 "훔치는" 데 사용 됩니다 . 명령 행에 옵션 이 없으면 작동합니다.-Ltree-L n

다른 모든 옵션과 인수는 tree명령 으로 전달됩니다 .

local PATTERN=...줄은 정말 필요하지 않습니다. 나는 한 줄에 들어가고 여기에서 단어 줄 바꿈이되지 않도록하기 위해 그렇게했습니다 U&L. 정규 표현식은 아마도 직접적으로 진행되어야 tree | grep ...합니다.

다음과 같이 실행하십시오.

mytreedu 

또는

mytreedu -L 2 /path/to/dir/

1
나는 코드를 좋아하지만 '-d'를 사용할 수 없다는 것을 반복하십시오. 그렇다면 크기 요약이 잘못되었거나 적어도 여기에 있기 때문입니다. 크기는 항상 디렉토리 자체의 항목 크기 인 '4096'으로보고되지만 모든 내용의 크기는 아닙니다.
Ray Andrews

... 현재 디렉토리 아래의 각 디렉토리에 대해 '4096'이라고 말해야하지만 디렉토리를 포함하여 디렉토리의 크기는 얻지 못합니다.
Ray Andrews

당신은 단지 -L문제라고 언급했지만 전혀 언급하지 않았습니다 -d. 이제보고 된 숫자를 자세히 살펴보고 어떤 식 으로든 보고 된 숫자 와 비슷한 보고서 크기 도 tree --du아닙니다 . tree --du -ddu
cas

100 % 미만의 디스플레이는 정확한 크기를 제공하지 않습니다. '-d'또는 '-L 2'등을 통해 제한 할 수 있습니다. 표시되지 않은 경우 크기로 계산되지 않습니다.
Ray Andrews

tree --du또는하지 않고, 어쨌든 디렉토리에 대한 정확한 크기를 제공하지 않는 것 -d또는 -L. 나는 숫자가 무엇인지 알지 못하지만 어떤 du보고서 와 관련이 없습니다 .
cas

3

dutree 를 사용할 수 있습니다

여기에 이미지 설명을 입력하십시오

  • LS_COLORS 환경 변수에 따른 컬러 출력.
  • 파일 시스템 트리를 표시합니다
  • 작은 파일을 집계하는 기능
  • 파일 또는 디렉토리를 제외하는 기능
  • 다른 디렉토리를 비교하는 능력
  • Rust로 작성된 빠른

1

이 작업을 수행하는 완벽한 명령 도구는 없지만 필자는 두 가지 방법을 찾았습니다.

  • 폴더와 파일 크기를 모두 표시하지만 트리 모드에서는 표시되지 않습니다.

    du -ah --max-depth=1 /var/log

  • 트리 모드로 표시되지만 파일 크기 만 표시되며 폴더 수는

    tree -ah /var/log -L 1


0

cas에서 영감을 얻은 지금 나는 이것을하고 있습니다 :

treee ()
{
    integer levels=$(( ($1 + 1) * 4 ))
    tree --du -shaC | grep "\[01;34m" | grep -Ev "^[^\[]{$levels}\[*"
    du -sh .
}

당신은 모든 getopts가 물건을 버릴려고하는 경우에, 당신은 적어도 아직해야 "$@"직후 -shaC. 그렇지 않으면 해당 기능은 현재 디렉토리에서만 작동하도록 하드 코딩됩니다.
cas

작업이 완료되면 이에 대해 물어볼 것입니다. 정교하게 작성하십시오. 물론 "$ @"에 관한 것이지만 지금까지는 현재 디렉토리에서만 사용 했으므로 아직 눈치 채지 못했습니다. 이 모든 'getopts'재료는 나에게 새로운 것입니다.
Ray Andrews

사용의 이점 중 하나는 getopts옵션이 명령 줄에 임의의 순서로 나타날 수 있다는 것입니다. mytree필자가 작성한 함수 의 초기 버전은 "$ 1"을 사용 했으므로 깊이 인수 첫 번째 인수 여야 했으며 선택 사항이 아니 었습니다. 나는 충분하지 않다고 결정했기 때문에 bash 내장 getopts을 사용 하여 -L옵션 을 처리했습니다 . 이를 통해 -L n옵션이 명령 줄의 어느 곳에 나 나타날 수 있었습니다 . 또한 완전히 선택적 일 수있었습니다.
cas

그것을 보는 또 다른 방법은 getopts시스템의 다른 프로그램과 마찬가지로 실제 옵션과 인수를 취하는 스크립트를 작성하는 것입니다 ($ 1 $ 2 $ 3 등과 같은 하드 코딩 된 위치의 인수 대신). 그리고 패키지 에서 getopt프로그램 을 사용한다면 (단,을 제외하고 s) GNU 프로그램처럼 util-linux짧은 단일 문자 옵션 (예 :) -l과 긴 옵션 ( 예 :)을 모두 사용할 수 있습니다 --long.
cas

아 ... 지금 나에게 돌아온다. 예, 실제로 한 번 사용했습니다. 다시 한번 살펴 봐야합니다. 감사.
Ray Andrews
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.