如何编写bash脚本将子目录文件复制到指定目录并以路径信息重命名
Bash 路径拼接复制脚本实现方案
以下脚本可直接适配需求,支持所有合法字符的文件名、目录名:
#!/bin/bash # 请修改为实际的源主目录和目标目录路径 SOURCE_DIR="$HOME/MainDir" TARGET_DIR="$HOME/NewDir" # 自动去除源目录末尾的斜杠,避免路径匹配异常 SOURCE_DIR=${SOURCE_DIR%/} # 目标目录不存在则自动创建 mkdir -p "$TARGET_DIR" # 遍历源目录下最多两级子目录中的所有文件,适配所有特殊字符场景 find "$SOURCE_DIR" -maxdepth 3 -type f -print0 | while IFS= read -r -d '' file; do # 去掉源目录前缀,将路径分隔符/替换为_得到新文件名 new_filename="${file#$SOURCE_DIR/}" new_filename="${new_filename//\//_}" # 执行复制操作 cp "$file" "$TARGET_DIR/$new_filename" done
脚本特性说明
- 层级控制:
find命令添加-maxdepth 3参数,刚好匹配最多2级子目录的结构,不会读取更深层级的文件 - 特殊字符兼容:采用空字符作为文件名分隔符,支持目录名/文件名包含空格、连续点、换行符等任意Linux合法字符
- 命名规则匹配:自动剥离源目录前缀后替换路径分隔符,完全符合
一级子目录_二级子目录_文件名的命名要求 - 容错设计:自动创建目标目录,不需要提前手动新建
使用方法
- 将脚本内容保存为
copy_rename_files.sh - 修改脚本开头的
SOURCE_DIR和TARGET_DIR为实际路径 - 给脚本添加执行权限:
chmod +x copy_rename_files.sh - 运行脚本:
./copy_rename_files.sh
内容的提问来源于stack exchange,提问作者OlM
相关产品推荐
相关产品推荐

