遍历目录中的所有文件和目录,并生成全路径

本文介绍了一种使用Python遍历指定目录下所有文件及子目录的方法,通过os模块的walk函数实现,可指定文件类型进行筛选,适用于批量处理文件的需求。
# -*- coding:UTF-8 -*-

"""
遍历目录中的所有文件和目录,并生成全路径
"""

import os

target_path = "D:/temp/"

'''
path: 遍历的路径
file_type: 文件类型列表,如果为空遍历所有文件,不为空遍历指定文件如[".c", ".h", ".py"]等
'''
def generate_file_list(path, file_type=[]):
    walks = os.walk(path)
    for walk in walks:
        for file in walk[2]:
            if not file_type:   # empty
                yield walk[0] + "/" + file
            else:
                root, ext = os.path.splitext(file)
                if ext in file_type:
                    yield walk[0] + "/" + file

def generate_dir_list(path):
    walks = os.walk(path)
    for walk in walks:
        for dir_name in walk[1]:
            yield walk[0] + "/" + dir_name

for file in generate_file_list(target_path, filetype=[".txt", ".c"]):
    print(file)

# for dir_name in generate_dir_list(target_path):
#     print(dir_name)

转载于:https://www.cnblogs.com/wangshide/p/4612068.html

<think>好的,用户现在的问题是在Mac系统下如何用命令行遍历目录下的所有文件目录。之前用户提过类似的问题,关于移动.bff文件清理其他目录,现在需要处理更基础的遍历任务。我需要结合用户提供的引用之前的回答来给出解决方案。首先,查看用户提供的引用。引用[1]提到使用递归函数遍历目录,这可能对应到find命令的递归查找。引用[4]展示了在LinuxMac中使用find命令的例子,比如查找.lua文件处理。引用[5]用到了tree命令生成目录结构,但用户现在可能没有安装tree,所以可能需要替代方法。 用户之前的问题涉及到使用find命令来移动删除文件,所以这次遍历可能也需要用到find。用户可能需要不同的方法,比如find、ls、tree或者编写shell脚本。我需要考虑不同方法的优缺点。比如find命令可以递归列出所有文件目录,ls加上-R参数也可以递归,但格式可能不够友好。tree命令更直观,但需要安装。此外,用户可能需要处理隐藏文件,所以需要包括以点开头的文件。 还要注意用户可能想了解如何排除某些目录文件,或者如何处理特殊字符。但当前问题主要是遍历,所以先给出基本方法,再扩展其他选项。根据引用[1]中的递归遍历,可以对应到find命令的递归查找。引用[4]中的例子使用了find,所以这可能是一个可靠的方法。需要给出具体的命令,比如使用find的基本语法,然后解释参数。 另外,用户可能需要将结果保存到文件,或者进行进一步处理,比如结合xargs或-exec执行其他命令。例如,用户之前的问题中使用了-exec来移动文件,这里可以建议类似的用法。 最后,生成相关问题需要考虑用户可能的后续需求,比如排除隐藏目录、计算文件大小、处理文件名空格等。这些问题可能基于引用[3]提到的目录大小计算引用[5]的diff比较需求。</think>### 遍历目录的4种方法 根据引用[1][4][5]的递归遍历思想,在MacOS中可通过以下命令行方案实现目录遍历: #### 方法1:find命令(递归遍历) ```bash # 基本递归遍历(含隐藏文件) find /目标路径 -print # 路径替换为实际目录,如$ ~/Documents$ # 数学表达式:遍历深度约束 $$ \text{maxdepth} = \begin{cases} n & \text{限制遍历深度} \\ \infty & \text{默认全递归} \end{cases} $$ 示例:限制3层深度 find /path -maxdepth 3 -print # 满足$O(n^2)$时间复杂度[^4] ``` #### 方法2:ls命令(非递归扩展) ```bash # 递归列出文件详情(含权限信息) ls -lR /目标路径 # 参数$R$表示递归 # 过滤隐藏文件(排除.开头的文件) ls -lR | grep -v "^\." # 使用$grep$过滤,满足$A - \{隐藏文件\}$集合运算 ``` #### 方法3:tree命令(可视化结构) ```bash # 需要先安装tree(通过Homebrew) brew install tree # 生成带层级的树状图 tree -aC /目标路径 # 参数$a$包含隐藏文件,$C$彩色显示 ``` #### 方法4:自定义递归脚本 ```bash #!/bin/bash traverse() { for item in "$1"/*; do if [ -d "$item" ]; then echo "目录: $item" # 处理目录 traverse "$item" # 递归调用 elif [ -f "$item" ]; then echo "文件: $item" # 处理文件 fi done } traverse "/目标路径" # 调用函数 ``` ### 性能对比 | 方法 | 时间复杂度 | 内存占用 | 输出友好度 | |------|------------|----------|------------| | find | $O(n)$ | 低 | ★★☆☆☆ | | ls -R | $O(n)$ | 中 | ★★★☆☆ | | tree | $O(n)$ | 高 | ★★★★★ | | 脚本 | $O(n^2)$ | 高 | ★★☆☆☆ | ### 高级应用场景 1. **带条件过滤**(引用[4]的扩展): ```bash # 仅查找.py文件统计行数 find ~/code -name "*.py" -exec wc -l {} \; # 满足$\sum_{i=1}^n l_i$计算模式 ``` 2. **排除特定目录**(引用[5]的改进): ```bash find /path -type d \( -name "node_modules" -o -name ".git" \) -prune -o -print ``` 3. **生成MD5校验**: ```bash find . -type f -exec md5 {} \; > checksums.txt # 满足$f(x) \rightarrow hash$映射 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值