【linux操作基础】多目录文件复制且同名不覆盖

前言

最近整理不同gt文件计算类别权重,发现整合后的gt文件数量变少,原因是不同目录中文件有同名的,发生覆盖,故记录之;

相关脚本:

脚本1:同名不覆盖复制文件

# 同名不覆盖复制文件
#!/bin/bash

# 源目录
source_dir="./train/"
# 目标目录
destination_dir="./gtrain/"

# 创建目标目录(如果不存在)
mkdir -p "$destination_dir"

find "$source_dir" -type f -name "*.png" | while read -r file; do
    filename=$(basename "$file")
    target_file="$destination_dir/$filename"
    counter=1
    while [ -e "$target_file" ]; do
        base_name="${filename%.*}"
        extension="${filename##*.}"
        target_file="$destination_dir/${base_name}_${counter}.${extension}"
        counter=$((counter + 1))
    done
    cp "$file" "$target_file"
    echo "Copied $file to $target_file"
done

 脚本2:多目录下文件按照一定规则重命名

#!/bin/bash

dirs_img="
/media/485E234682AE9EFD/01_dataset/APA/anno_image/data/yuyan_multitask_batch12_1434_20250311_700_img
/media/485E234682AE9EFD/01_dataset/APA/anno_image/data/yuyan_multitask_batch12_1434_20250311_734_img
"
for dir in $dirs_img; do
    echo $dir
    for file in $dir/*.png; do
        # echo $file
        # 检查是否是文件
        if [[ -f $file ]]; then
            # 重命名文件,添加后缀
            # mv "$file" "${file}${suffix}"
            suffix=`echo $file|sed -r 's/(.*)(\..*)/\1_leftImg8bit\2/g'`
            # suffix=`echo $file|sed -r 's/(.*)(\..*)/\1_gtFine_labelIds\2/g'`
            # suffix=`echo $file|sed -r 's/(.*)(\..*)/\1_gtFine_labelIds\2/g'`
            mv $file $suffix
        fi
    done
done

dirs_gt="
/media/485E234682AE9EFD/01_dataset/APA/anno_image/data/yuyan_multitask_batch12_1434_20250311_700_gt
/media/485E234682AE9EFD/01_dataset/APA/anno_image/data/yuyan_multitask_batch12_1434_20250311_734_gt
"
for dir in $dirs_gt; do
    echo $dir
    for file in $dir/*.png; do
        # echo $file
        # 检查是否是文件
        if [[ -f $file ]]; then
            # 重命名文件,添加后缀
            # mv "$file" "${file}${suffix}"
            # suffix=`echo $file|sed -r 's/(.*)(\..*)/\1_leftImg8bit\2/g'`
            suffix=`echo $file|sed -r 's/(.*)(\..*)/\1_gtFine_labelIds\2/g'`
            # suffix=`echo $file|sed -r 's/(.*)(\..*)/\1_gtFine_labelIds\2/g'`
            mv $file $suffix
        fi
    done
done

 脚本3:文件名称太长,将名称批量化写入txt文件

# 文件名称太长,将名称批量化写入txt文件
find gt/ -type f -printf "%f\n" > gt.txt

 

 

END

 

posted on 2025-03-17 15:48  鹅要长大  阅读(71)  评论(0)    收藏  举报

导航