利用Linux Shell并行复制文件
本文记录一段Shell代码,用于将某些目录下所有的一级子文件进行遍历,得到其中想要保存的文件类型(在本文中是.ckpt结尾的文件),并将其备份到另一个文件夹中。 与其他方法不同,本文采用
&!
方式执行cp命令,在执行速度上更快。
#!/bin/bash
# 源目录
declare -a source_dirs=(
"./partnet_chair"
"./partnet_chair"
)
# 目标目录的基本路径
destination_base="/data_new/zry/checkpoints_cvpr24"
# 遍历源目录
for source in "${source_dirs[@]}"; do
# 查找所有.ckpt文件并在后台复制它们
find "$source" -type f -name "*.ckpt" | while read -r file; do
# 计算目标文件路径,包括源目录名称
relative_path="${file#$source}"
dest_file="${destination_base}/${source##*/}${relative_path}"
# 创建目标文件的目录(如果不存在)
mkdir -p "$(dirname "$dest_file")"
# 在后台复制文件
cp "$file" "$dest_file" &!
# 打印一下
echo "$dest_file"
done
done
# 等待所有后台任务完成
wait