Linux Bash脚本实现同名文件夹间指定文件批量复制
Bash脚本实现批量复制指定文件夹内的U文件
需求说明
你需要批量复制源目录下命名为0、0.1……10的文件夹中的U文件,到目标目录的对应同名文件夹中,同时将目标文件夹内controlDict文件的endTime替换为startTime。
正确实现脚本
# 替换为你的实际源目录和目标目录 SOURCE_DIR="/你的源目录路径" TARGET_DIR="/你的目标目录路径" # 生成从0到10、步长0.1的小数序列(覆盖所有目标文件夹) for dir_name in $(seq -f "%.1f" 0 0.1 10) do # 检查源文件是否存在 if [ -f "${SOURCE_DIR}/${dir_name}/U" ]; then # 确保目标文件夹存在,不存在则创建 mkdir -p "${TARGET_DIR}/${dir_name}" # 复制U文件到目标路径 cp "${SOURCE_DIR}/${dir_name}/U" "${TARGET_DIR}/${dir_name}/" echo "完成复制: ${SOURCE_DIR}/${dir_name}/U -> ${TARGET_DIR}/${dir_name}/" # 替换controlDict中的endTime为startTime(如果文件存在) if [ -f "${TARGET_DIR}/${dir_name}/controlDict" ]; then # GNU sed写法,macOS请改为 sed -i '' 's/endTime/startTime/g' sed -i 's/endTime/startTime/g' "${TARGET_DIR}/${dir_name}/controlDict" echo "完成替换: ${TARGET_DIR}/${dir_name}/controlDict 中的endTime为startTime" fi else echo "警告: ${SOURCE_DIR}/${dir_name}/U 不存在,跳过该文件夹" fi done
脚本关键说明
seq -f "%.1f" 0 0.1 10:生成保留1位小数的序列,精准匹配你的文件夹命名规则。mkdir -p:自动创建目标文件夹(包括父目录),避免因路径不存在导致复制失败。- 增加存在性检查:跳过缺失
U文件的文件夹,避免脚本中断。 sed替换:注意系统差异,GNU/Linux用sed -i,macOS需要用sed -i ''。
原脚本问题修正
你提供的初始脚本存在以下问题:
- 变量赋值错误:Bash中变量赋值时等号两侧不能有空格,比如
N = 100应改为N=100。 - 序列生成错误:
seq 1 $N生成的是整数序列,无法匹配你的小数命名文件夹,需要用带步长的seq命令生成小数序列。 - 路径写法错误:
cp命令需要明确的源文件和目标路径,不能用注释占位符。
内容的提问来源于stack exchange,提问作者YUKI
相关产品推荐
相关产品推荐

