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

求Bash脚本/命令:查找_sh后缀文件并移动重命名为_priv

嘿,这个需求不难搞定,用Bash的基础循环和字符串处理就能实现,我给你拆解一下思路,再附上完整脚本和注意事项:

实现步骤与核心逻辑

1. 先确保目标目录存在

首先得保证./Folder目录已经创建,不然移动文件时会报错。用mkdir -p最稳妥——它会自动创建不存在的目录,就算目录已经存在也不会抛出错误:

mkdir -p ./Folder

2. 遍历目标文件并处理

我们需要遍历当前目录下所有以_sh结尾的文件,同时处理文件名后缀替换和移动操作:

  • 用for循环匹配*_sh模式的文件
  • 用Bash内置的字符串替换${file/_sh/_priv}把后缀从_sh改成_priv
  • 用mv命令完成“移动+改名”的操作(mv本身就支持移动时重命名)

完整可运行脚本

把逻辑整合起来,加上容错处理,就是下面的脚本:

#!/bin/bash

# 确保目标目录存在
mkdir -p ./Folder

# 开启nullglob选项:避免没有匹配文件时,循环把"*_sh"当作文件名处理
shopt -s nullglob

# 遍历所有以_sh结尾的普通文件
for file in *_sh; do
    # 只处理普通文件,跳过目录(防止误操作)
    if [ -f "$file" ]; then
        # 替换文件名后缀
        new_filename="${file/_sh/_priv}"
        # 移动并改名
        mv "$file" "./Folder/$new_filename"
        # 可选:打印操作日志,方便确认进度
        echo "已处理:$file → ./Folder/$new_filename"
    fi
done

# 关闭nullglob,恢复默认shell行为(可选)
shopt -u nullglob

关键细节说明

  • nullglob选项:这个非常重要!如果当前目录没有_sh结尾的文件,默认情况下*_sh会被当作一个字符串传递给循环,导致脚本尝试处理一个不存在的文件。开启nullglob后,没有匹配的话循环会直接跳过。
  • 双引号包裹变量:如果文件名包含空格、特殊字符(比如!、$),双引号能避免shell把文件名拆分成多个参数,防止报错。
  • 文件类型判断:用[ -f "$file" ]确保我们只处理普通文件,不会误操作同名的目录。

临时执行的单行命令版本

如果不想写脚本,直接把命令串起来在终端执行也行:

mkdir -p ./Folder && shopt -s nullglob && for f in *_sh; do [ -f "$f" ] && mv "$f" "./Folder/${f/_sh/_priv}"; done && shopt -u nullglob

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:10:16