我想知道我们是否可以将“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
答案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