本文目录导读:

Python 版本(最推荐)
基础递归遍历
import os
def traverse_directory(path):
for root, dirs, files in os.walk(path):
level = root.replace(path, '').count(os.sep)
indent = ' ' * 4 * level
print(f"{indent}{os.path.basename(root)}/")
sub_indent = ' ' * 4 * (level + 1)
for file in files:
print(f"{sub_indent}{file}")
# 使用示例
traverse_directory('/path/to/directory')
高级版本(带过滤和大小统计)
import os
def advanced_traverse(path, file_extensions=None, min_size=None):
results = []
for root, dirs, files in os.walk(path):
for file in files:
file_path = os.path.join(root, file)
file_size = os.path.getsize(file_path)
# 文件扩展名过滤
if file_extensions:
ext = os.path.splitext(file)[1]
if ext not in file_extensions:
continue
# 文件大小过滤
if min_size and file_size < min_size:
continue
results.append({
'path': file_path,
'size': file_size,
'modified': os.path.getmtime(file_path)
})
return results
# 使用示例
files = advanced_traverse('.', file_extensions=['.py', '.txt'], min_size=1024)
for f in files:
print(f"路径: {f['path']}, 大小: {f['size']} bytes")
Bash/Shell 版本
递归列出所有文件
#!/bin/bash
# 方法1: 使用 find
find /path/to/directory -type f 2>/dev/null
# 方法2: 树形结构
find /path/to/directory -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
# 方法3: 带文件大小
find /path/to/directory -type f -exec ls -lh {} \;
# 方法4: 只显示文件名和大小
find /path/to/directory -type f -exec sh -c 'echo "{}: $(stat -f%z "{}" 2>/dev/null || stat -c%s "{}")"' \;
Node.js 版本
异步遍历
const fs = require('fs');
const path = require('path');
async function traverseDirectory(dirPath) {
const files = await fs.promises.readdir(dirPath);
for (const file of files) {
const fullPath = path.join(dirPath, file);
const stat = await fs.promises.stat(fullPath);
if (stat.isDirectory()) {
console.log(`📁 ${file}/`);
await traverseDirectory(fullPath);
} else {
console.log(`📄 ${file} (${stat.size} bytes)`);
}
}
}
// 使用示例
traverseDirectory('./').catch(console.error);
Java 版本
递归遍历
import java.io.File;
public class DirectoryTraverser {
public static void traverse(File dir, String indent) {
File[] files = dir.listFiles();
if (files == null) return;
for (File file : files) {
if (file.isDirectory()) {
System.out.println(indent + "[DIR] " + file.getName());
traverse(file, indent + " ");
} else {
System.out.println(indent + "[FILE] " + file.getName() +
" (" + file.length() + " bytes)");
}
}
}
public static void main(String[] args) {
traverse(new File("/path/to/directory"), "");
}
}
Windows Batch 版本
@echo off
:: 递归列出所有文件
dir /s /b "C:\path\to\directory"
:: 树形结构
tree "C:\path\to\directory" /f
:: 带文件大小
for /r "C:\path\to\directory" %%f in (*) do (
echo %%f - %%~zf bytes
)
实用功能扩展
Python 版本:带进度条和异常处理
import os
import sys
from pathlib import Path
def safe_traverse(path, ignore_errors=True):
"""安全的目录遍历,支持并行和错误处理"""
results = []
try:
path = Path(path)
for item in path.rglob('*'):
try:
if item.is_file():
results.append({
'name': item.name,
'path': str(item),
'size': item.stat().st_size,
'suffix': item.suffix
})
except PermissionError:
if not ignore_errors:
print(f"权限不足: {item}", file=sys.stderr)
continue
except Exception as e:
print(f"遍历错误: {e}", file=sys.stderr)
return results
# 使用示例
files = safe_traverse('.')
print(f"共找到 {len(files)} 个文件")
过滤特定模式的版本
import fnmatch
import os
def find_files_by_pattern(root_dir, pattern):
"""按文件名模式查找文件"""
matches = []
for root, dirs, files in os.walk(root_dir):
for filename in fnmatch.filter(files, pattern):
matches.append(os.path.join(root, filename))
return matches
# 使用示例
# 查找所有 .log 文件
log_files = find_files_by_pattern('.', '*.log')
print(f"找到 {len(log_files)} 个日志文件")
# 查找 data_2024_*.csv 格式的文件
data_files = find_files_by_pattern('.', 'data_2024_*.csv')
这些脚本可以根据你的具体需求修改,比如添加文件类型过滤、大小限制、递归深度控制等,选择最适合你使用场景的语言和实现方式。