基于扩展名(含多组合)识别文件的Bash脚本实现需求
基于扩展名(含组合扩展名)的Bash文件处理方案
我给你准备了一个实用的Bash脚本,它能精准区分单一扩展名和组合扩展名的文件,为每种类型执行专属操作——核心诀窍是优先匹配最长的组合扩展名,彻底避免像file-5.zip.tar被误判为普通zip文件的问题。
完整脚本实现
#!/bin/bash # 遍历当前工作目录下的目标文件 for file in file-*; do # 跳过目录(如果当前目录存在子目录的话) [[ -f "$file" ]] || continue # 按「长组合扩展名→单一扩展名」的顺序匹配,防止误判 case "$file" in *.zip.tar) echo "处理组合扩展名 .zip.tar 文件: $file" # 替换成你的实际处理逻辑,比如自定义解压/转换命令 # custom-zip-tar-handler "$file" ;; *.tar.gz) echo "处理组合扩展名 .tar.gz 文件: $file" # 示例操作:解压tar.gz文件 # tar -xzf "$file" ;; *.zip) echo "处理单一扩展名 .zip 文件: $file" # 示例操作:解压zip文件 # unzip "$file" ;; *.tar) echo "处理单一扩展名 .tar 文件: $file" # 示例操作:解压tar文件 # tar -xf "$file" ;; *.gz) echo "处理单一扩展名 .gz 文件: $file" # 示例操作:解压gz文件 # gunzip "$file" ;; *) echo "未识别的文件类型: $file" ;; esac done
关键细节说明
- 匹配顺序是核心:必须把
.zip.tar、.tar.gz这类组合扩展名放在case语句最前面,这样长扩展名的文件不会被后面的单一扩展名规则抢先匹配。 - 容错处理:脚本里加了
[[ -f "$file" ]] || continue的判断,会自动跳过目录,只处理普通文件。 - 灵活定制:你只需要把每个分支里的
echo语句替换成实际业务逻辑即可,比如解压、加密、批量转换等操作。
测试验证
把脚本保存为process-files.sh,先赋予执行权限:
chmod +x process-files.sh
在你的目标目录运行后,会输出类似如下的识别结果:
处理单一扩展名 .zip 文件: file-1.zip 处理单一扩展名 .tar 文件: file-2.tar 处理组合扩展名 .tar.gz 文件: file-3.tar.gz 处理单一扩展名 .gz 文件: file-4.gz 处理组合扩展名 .zip.tar 文件: file-5.zip.tar 处理组合扩展名 .tar.gz 文件: file-6.tar.gz 处理单一扩展名 .gz 文件: file-7.gz
内容的提问来源于stack exchange,提问作者DamienzOnly
相关产品推荐
相关产品推荐

