菜鸟科技网

Linux目录树命令有哪些常用选项?

Linux 目录树

在开始之前,先理解一下 Linux 的目录树结构,它是一个倒置的树形结构,所有东西都从根目录 开始。

Linux目录树命令有哪些常用选项?-图1
(图片来源网络,侵删)
  • : 根目录,一切的开始。
  • /home : 用户的主目录。
  • /etc : 系统的配置文件。
  • /var : 经常变化的文件,如日志、缓存。
  • /tmp : 临时文件。
  • /usr : 用户安装的程序和文件。

tree - 最直观、最常用的树形结构查看器

tree 命令以树状图的形式递归地显示目录内容,非常直观,是日常工作中最常用的工具。

安装

tree 命令通常不默认预装,需要手动安装。

  • 在 Debian/Ubuntu 系统上:

    sudo apt update
    sudo apt install tree
  • 在 CentOS/RHEL/Fedora 系统上:

    Linux目录树命令有哪些常用选项?-图2
    (图片来源网络,侵删)
    sudo yum install tree
    # 或者对于较新的系统
    sudo dnf install tree

基本用法

  1. 查看当前目录的树状结构 在任意目录下运行:

    tree

    示例输出:

    .
    ├── dir1
    │   ├── file1.txt
    │   └── file2.log
    ├── dir2
    │   └── subdir
    │       └── image.png
    └── script.sh
    3 directories, 4 files
  2. 查看指定目录的树状结构

    tree /var/log
  3. 限制递归深度 使用 -L 选项可以限制显示的目录层级。

    Linux目录树命令有哪些常用选项?-图3
    (图片来源网络,侵删)
    # 只显示当前目录和下一级子目录
    tree -L 2

    示例输出:

    .
    ├── dir1
    │   ├── file1.txt
    │   └── file2.log
    ├── dir2
    │   └── subdir
    └── script.sh
    3 directories, 4 files
  4. 只显示目录 使用 -d 选项可以只显示目录,不显示文件。

    tree -d
  5. 排除特定目录或文件 使用 -I 选项可以排除匹配特定模式的文件或目录(类似 grep -v)。

    # 排除所有 .log 文件
    tree -I "*.log"
    # 排名为 'tmp' 的目录
    tree -I "tmp"
  6. 显示文件大小 使用 -h 选项可以以人类可读的方式(如 K, M, G)显示文件大小。

    tree -h

find - 最强大、最灵活的文件查找工具

find 的主要功能是查找文件,但它也可以用来生成目录树,它比 tree 更灵活,因为可以基于各种条件(如文件名、大小、修改时间、权限等)来查找,然后对找到的文件执行操作。

基本用法

  1. find + ls 生成类树状结构 find 命令本身不生成树状图,但可以结合其他命令实现,一个经典的方法是使用 -printf 选项(GNU find 特有)。

    find . -type d -printf "%h\n" | sort -u | sed 's|[^/]*/|  |g'
    • find . -type d: 查找所有类型为目录的文件。
    • -printf "%h\n": 打印每个目录的父目录路径。%h 代表路径的父部分。
    • sort -u: 对结果进行排序并去除重复项。
    • sed 's|[^/]*/| |g': 用两个空格替换路径中的每一级目录,形成缩进效果。
  2. find + exec/-execdir 进行操作 find 的真正威力在于可以对找到的文件执行操作。

    # 查找所有 .txt 文件并删除它们
    find . -type f -name "*.txt" -exec rm {} \;
    # 查找所有权限为 777 的文件并修改权限
    find . -type f -perm 777 -exec chmod 644 {} \;
    # 查找过去 7 天内修改过的文件并列表
    find . -type f -mtime -7 -ls

ls + grep + sed - 纯 Shell 命令组合(无需安装)

如果你没有 tree 命令,或者想在脚本中使用更轻量的方法,可以通过组合 ls, grep, 和 sed 来实现。

基本用法

这是一个非常巧妙的单行命令,可以生成一个简单的目录树:

ls -F | grep / | sed 's|/||' | while read dir; do echo "├─ $dir"; ls -F "$dir" | grep / | sed 's|/||' | sed 's|^|│  |'; done
  • ls -F: 在目录名后加上 。
  • grep /: 筛选出目录。
  • sed 's|/||': 去掉目录名末尾的 。
  • while read dir; ... done: 循环处理每个目录。
  • echo "├─ $dir": 打印带前缀的目录名。
  • ls -F "$dir" | ...: 对子目录重复同样的操作,并用 sed 's|^|│ |' 添加缩进和竖线。

这个命令比较复杂,可读性差,但展示了 Shell 命令组合的强大能力。


pytree - Python 实现的替代品

pytree 是一个用 Python 写的 tree 命令替代品,功能与 tree 类似,但通常在需要 Python 环境的系统上可用。

基本用法

# 显示当前目录
pytree
# 指定目录
pytree /path/to/directory
# 限制深度
pytree -L 2

ls - 最基础、最通用的目录列表工具

虽然 ls 不直接生成树状图,但它是所有文件系统操作的基础,熟练掌握 ls 的各种选项至关重要。

常用选项

  • ls -F: 在文件名后添加指示符( 表示目录, 表示可执行文件, 表示符号链接)。
  • ls -Rls --recursive: 递归列出目录内容,效果类似于一个扁平化的树状结构。
    # 输出会很长,因为它会把所有子目录的内容都列在父目录下面
    ls -R
  • ls -lls -la: 以长格式列出文件,包含权限、所有者、大小、修改时间等详细信息。
  • ls -hls -lh: 与 -l 结合使用,以人类可读的方式显示文件大小。

总结与对比

命令/工具 主要特点 优点 缺点 适用场景
tree 专用树形查看器,直观易用 输出最直观,选项简单,功能够用 需要额外安装 日常查看目录结构,快速了解项目文件组织
find 强大的文件查找工具,功能极其丰富 灵活性最高,可基于任意条件查找和操作 语法复杂,主要用于查找而非直观展示 按条件查找文件,并对结果执行批量操作
ls 组合 纯 Shell 命令,无需安装 系统自带,轻量级 命令复杂,可读性差,不易维护 tree 命令时的应急方案,或在 Shell 脚本中快速实现
pytree Python 实现的 tree tree 功能类似 依赖 Python 环境 已有 Python 环境的系统,或需要特定 Python 扩展功能时

推荐工作流

  1. 快速浏览目录结构:使用 tree,这是最常用、最高效的方式。
  2. 查找特定文件或按条件处理文件:使用 find,这是最强大、最灵活的方式。
  3. 查看单个目录的详细信息:使用 ls -lh
  4. 在脚本中或没有 tree 的环境中:使用 ls 组合命令或尝试用 find 模拟。

希望这份详细的指南能帮助你更好地理解和使用 Linux 的目录树命令!

分享:
扫描分享到社交APP
上一篇
下一篇