You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash环境下如何遍历目录文件?for循环执行命令写法咨询

在Bash中遍历指定目录文件及执行命令的方法

嘿,我来帮你梳理下Bash里处理目录文件遍历的常用方案,还有怎么结合循环对文件执行命令~

一、遍历指定目录下的文件

1. 基础遍历(不含隐藏文件)

最直接的就是用for循环配合通配符*,比如遍历当前目录下的所有文件(包括子目录,如果你只想看普通文件可以加判断,后面会说):

for file in *; do
    echo "找到文件/目录: $file"
done

如果要指定某个目录,直接把路径加上就行:

# 遍历 /home/user/docs 目录下的所有条目
for file in /home/user/docs/*; do
    echo "$file"
done

⚠️ 重要提醒:如果文件名里有空格、特殊字符,一定要用双引号包裹$file,否则Bash会把空格当成分隔符,把一个文件名拆成多个参数,导致错误。

2. 包含隐藏文件的遍历

默认*不会匹配以.开头的隐藏文件,如果你需要包含它们,可以开启dotglob选项:

# 开启匹配隐藏文件的选项
shopt -s dotglob
for file in /home/user/docs/*; do
    echo "$file"
done
# 用完可以关闭选项,恢复默认行为
shopt -u dotglob

3. 递归遍历子目录里的文件

如果要连子目录里的文件一起遍历,可以开启globstar选项:

shopt -s globstar
# ** 表示匹配所有子目录层级
for file in /home/user/docs/**/*; do
    # 只输出普通文件,排除子目录
    if [ -f "$file" ]; then
        echo "$file"
    fi
done
shopt -u globstar

二、遍历文件并执行命令

1. 对每个文件执行简单命令

比如我们想给每个普通文件生成MD5哈希值,可以这么写:

target_dir="/home/user/docs"
for file in "$target_dir"/*; do
    # 先判断是不是普通文件,避免处理子目录
    if [ -f "$file" ]; then
        md5sum "$file"
    fi
done

2. 执行复杂多步操作

如果需要对文件做一系列处理,比如复制到指定目录并重命名,示例如下:

source_dir="/home/user/photos"
dest_dir="/home/user/photos/backup"

# 先确保目标目录存在
mkdir -p "$dest_dir"

for file in "$source_dir"/*; do
    if [ -f "$file" ]; then
        # 获取文件名(不带路径)
        filename=$(basename "$file")
        # 复制文件并添加日期前缀
        cp "$file" "$dest_dir/$(date +%Y%m%d)_$filename"
        echo "已备份文件: $filename"
    fi
done

3. 用find配合exec(更灵活的递归处理)

如果需要递归遍历子目录,find命令往往比for循环更方便,比如给所有.txt文件添加后缀:

# 递归找到所有 .txt 文件,并重命名为 .txt.bak
find /home/user/docs -type f -name "*.txt" -exec mv {} {}.bak \;

这里的{}会被替换成每个找到的文件路径,\;表示每个文件单独执行一次命令。如果想批量处理(比如多个文件一起传参),可以用+代替\;,效率更高:

# 批量查看所有 .txt 文件的详情
find /home/user/docs -type f -name "*.txt" -exec ls -l {} +

内容的提问来源于stack exchange,提问作者graycloud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 06:43:04