如何为多子目录中的文件添加子目录名前缀重命名
批量给子目录文件添加目录名前缀的解决方案
方法一:用find命令一键处理
直接在父目录下执行这条命令,就能给所有子目录里的.fq.gz文件加上对应子目录名的前缀:
find . -type f -name "*.fq.gz" -exec sh -c 'mv "$0" "$(dirname "$0")/$(basename "$(dirname "$0")")_$(basename "$0")"' {} \;
命令拆解:
find . -type f -name "*.fq.gz":扫描当前父目录下所有后缀为.fq.gz的普通文件-exec sh -c '...' {} \;:对每个找到的文件执行后面的重命名逻辑- 重命名部分:提取文件所在的子目录名,拼上
_和原文件名,替换原文件路径
方法二:用bash脚本分步处理(更直观)
如果想更清楚看到每一步操作,可以写个简单的bash脚本,放在父目录下执行:
#!/bin/bash # 遍历父目录下的所有子目录 for subdir in */; do # 移除子目录名末尾的斜杠 subdir_name=${subdir%/} # 遍历当前子目录下的所有.fq.gz文件 for file in "$subdir"*.fq.gz; do # 跳过不存在的文件(比如子目录为空的情况) [ -f "$file" ] || continue # 提取纯文件名(不带路径) filename=$(basename "$file") # 执行重命名:子目录名_原文件名 mv "$file" "$subdir${subdir_name}_$filename" done done
执行前记得给脚本加权限:chmod +x rename_files.sh,然后运行./rename_files.sh
注意事项
- 操作前建议先备份文件,避免意外情况
- 若要处理其他类型文件,把命令里的
*.fq.gz改成对应的后缀即可 - 两种方法都支持带特殊字符的目录名/文件名,因为全程用引号包裹了变量
内容的提问来源于stack exchange,提问作者Kelli Anderson
相关产品推荐
相关产品推荐

