结合了“du”和“tree”的优点

结合了“du”和“tree”的优点

我想知道我们是否可以将“du”的诚实与“tree”的缩进格式结合起来。如果我想要目录大小的列表:

du -hx -d2

...显示两层深度,所有大小摘要都是诚实的,但没有子目录缩进。另一方面:

tree --du -shaC -L 2

...缩进和着色很好,但报告的尺寸是谎言。要获得实际尺寸,必须:

tree --du -shaC

...也就是说,如果您让“tree”显示整个目录结构,您只能获得真实的大小。我希望能够始终拥有正确的大小摘要,无论我要实际显示多少级别的子目录。我经常这样做:

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

...它会修剪除目录之外的所有内容,并很好地缩进它们...但是没有简单的方法可以将显示限制为给定的数字级别(没有摘要)。有办法吗?也许我错过了正确的开关......

答案1

还结帐NCDU: http://dev.yorhel.nl/ncdu

其页面还列出了其他“类似项目”:

gt5 - 与 ncdu 非常相似,但方法不同。

tdu - 另一个基于 ncurses 的小型磁盘使用可视化实用程序。

TreeSize - GTK,使用树视图。

Baobab - GTK,使用饼图、树视图和树图。与 GNOME 一起提供。

GdMap - GTK,带有树形图显示。

Filelight - KDE,使用饼图。

QDirStat - KDE,带有树状图显示。

QDiskUsage - Qt,使用饼图.

xdiskusage - FLTK,带有树形图显示。

fsv - 3D 可视化。

Philesight - Filelight 的基于 Web 的克隆。

答案2

您不需要 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命令删除所有具有两次(一个或多个空格,后跟一个非空格,后跟一个空格),后跟[.

如果您想要深度为 1,请将 {} 大括号内的绑定计数更改为{1}而非{2}。同样,如果您想要深度为 3,请将其更改为{3}

您可以将其转换为 shell 函数,如下所示:

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“窃取”任何-L选项及其参数tree(如果有)。如果-L n命令行上没有选项,那么也可以。

所有其他选项和参数都传递给tree命令。

local PATTERN=...条线其实没有必要。我这样做只是为了确保它适合一行而不是自动换行U&L。正则表达式可以而且可能应该直接上tree | grep ...线。

像这样运行它:

mytreedu 

或者

mytreedu -L 2 /path/to/dir/

答案3

您可以使用杜特里

在此输入图像描述

  • 根据 LS_COLORS 环境变量的彩色输出。
  • 显示文件系统树
  • 聚合小文件的能力
  • 排除文件或目录的能力
  • 比较不同目录的能力
  • 快速,用 Rust 编写

答案4

版本

$ tree --version;
# tree v2.1.1 © 1996 - 2023 by Steve Baker, Thomas Moore, Francesc Rocher,
# Florian Sesser, Kyosuke Tokoro

命令

# -x - Stay on the current file-system only...
# -a - All files are printed... (those beginning with a dot `.')...
# -p - Print the file type and permissions for each file...
# -u - Print the username, or UID...
# -g - Print the group name, or GID...
# -h - Print the size of each file but in a more human readable way...
# -F - Append a `/' for directories, a `=' for socket files...
# -D - Print the date of the last modification time...
# --du - For each directory report its size as the accumulation of sizes...
# --dirsfirst - List directories before files...
# --charset - Set the character set to use when outputting...
# --sort - Sort the output by type instead of name...
# --timefmt - Prints... and formats the date according to the format string...
#
tree -xapughFD \
    --du --dirsfirst \
    --charset='ascii' --sort='size' --timefmt='%Y-%m-%d_%H-%M-%S' -- \
    . \
    | grep -P '^(?:\|\s{3}|\s{4}){0,1}(?:`|\|)\-\-';

grep正则表达式中,{0,1}(坦率地说,类似于?)可以用于“深度”。例如,{0,3}将当前目录和最多 3 个目录放入深层。

例子

$ pwd -P;
/home/user
$ tree -xahpugFD --du --charset=ascii --dirsfirst --sort=size --timefmt='%Y-%m-%d_%H-%M-%S' -- '/usr/share/vlc' | grep -P '^(?:\|\s{3}|\s{4}){0,1}(?:`|\|)\-\-';
|-- [drwxr-xr-x root     root     520K 2022-10-23_09-19-24]  lua/
|   `-- [drwxr-xr-x root     root     516K 2022-10-23_09-19-24]  http/
|-- [drwxr-xr-x root     root     210K 2022-10-23_09-20-57]  skins2/
|   |-- [drwxr-xr-x root     root     4.1K 2022-10-23_09-20-57]  fonts/
|   |-- [-rw-r--r-- root     root     160K 2022-03-13_10-00-10]  default.vlt
|   |-- [-rw-r--r-- root     root      31K 2022-03-13_10-00-10]  winamp2.xml
|   |-- [-rw-r--r-- root     root      10K 2022-03-13_10-00-10]  skin.dtd
|   `-- [-rw-r--r-- root     root      167 2022-03-13_10-00-10]  skin.catalog
|-- [drwxr-xr-x root     root     6.1K 2022-10-23_09-19-24]  utils/
|   |-- [-rwxr-xr-x root     root      873 2022-03-13_10-00-10]  gnome-vlc-default.sh*
|   |-- [-rwxr-xr-x root     root      620 2022-03-13_10-00-10]  audio-vlc-default.sh*
|   `-- [-rwxr-xr-x root     root      620 2022-03-13_10-00-10]  video-vlc-default.sh*
`-- [-rw-r--r-- root     root      71K 2022-03-13_10-00-10]  vlc.ico

相关内容