shell脚本实现递归拷贝文件

shell脚本

复制代码
#!/bin/bash
list=(10.12.63.232 10.12.7.95 10.12.8.247 10.12.9.146   10.253.1.198  10.38.0.125   10.38.0.205  10.38.0.44  10.38.0.97 10.111.8.234   10.12.20.13    10.12.2.150  10.12.3.143  10.12.50.175  10.12.65.7    10.12.8.126  10.12.8.90   10.12.9.186   10.253.1.211  10.38.0.138   10.38.0.213  10.38.0.48  169.254.2.154 10.111.8.71    10.12.20.14    10.12.2.191  10.12.3.144  10.12.60.156  10.12.7.154   10.12.8.141  10.12.9.10   10.12.9.224   10.253.33.3   10.38.0.158   10.38.0.215  10.38.0.49 10.11.255.203  10.12.20.15    10.12.2.96   10.12.44.70  10.12.60.157  10.12.7.155   10.12.8.142  10.12.9.129  10.12.9.9  10.38.0.176   10.38.0.219  10.38.0.50 10.11.255.204  10.12.2.111    10.12.3.136  10.12.44.74  10.12.60.158  10.12.7.156   10.12.8.188  10.12.9.133  10.253.1.162  10.32.26.163  10.38.0.18    10.38.0.249  10.38.0.73)
path1=/anyrobot/archive_data/nas/cache/2024
path2=/anyrobot/archive_data/cache/2024
# 定义递归函数
fun() {
 local current_dir="$1"
 # 切换到当前目录
 cd "$current_dir" || exit
 # 遍历当前目录下的所有文件和目录
 for j in *;do
         if [ -d $j ];then
            # 如果是目录,递归调用
            fun $j
         else
            # 如果是文件,将path1中的文件拷贝到path2中
            path_1=$PWD
            # 从 path_1 中去除 path1 部分,得到剩余的路径
            remaining_path="${path_1#${path1}}"
            # 拼接 path2 和剩余路径
            path_2="${path2}${remaining_path}"
       #如果path_2不存在,则创建目录
       if [ ! -d $path_2 ];then

         #echo "$path_2不存在"

          /bin/mkdir -p $path_2
        fi

        #拷贝文件

            /bin/cp -rf $path_1/* $path_2
            break
         fi
  done
  # 返回上一级目录
  cd ..
}
for i in ${list[@]}; do
  if [ -d $path1/$i ];then
        cd $path1/$i
        #调用递归函数,从path1/$i路径开始,由于之前手动复制了一些,所以使用列表的方式来处理剩下的,否则可以直接从path1开始执行递归函数
        fun "."
  fi
done
复制代码

 

posted @   潇潇暮鱼鱼  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2023-08-30 go 工厂模式
点击右上角即可分享
微信分享提示