首页 > 系统相关 >shell脚本实现递归拷贝文件

shell脚本实现递归拷贝文件

时间:2024-08-30 10:36:28浏览次数:9  
标签:path2 shell 递归 10.38 path1 10.253 path 拷贝 10.12

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}"
            /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

 

标签:path2,shell,递归,10.38,path1,10.253,path,拷贝,10.12
From: https://www.cnblogs.com/xiaoxiaomuyuyu/p/18388192

相关文章

  • Shell循环语句:echo转义符和调试模式
    文章目录echo转义符常用转义字符常见的转义字符调试模式echo转义符常用转义字符在使用echo命令时,-n和-e是两个常用选项:echo-n:表示不换行输出。echo-e:启用转义字符,使得转义后的内容可以正确显示。常见的转义字符在echo-e中使用以下转义字符来控制......
  • lambda实现递归
    lambda实现递归在C++中,lambda表达式在定义时实际上不能直接调用自己,因为lambda在定义时没有名字。要让一个lambda自我引用,你需要使用一个技巧:将lambda自身作为参数传递给自己,从而实现递归。为什么Lambda自身在定义时无法被调用?匿名性:Lambda表达式是匿名的,编译器在......
  • 汉诺塔和递归
    目录需求背景、限制条件、化简模拟盘子的移动步骤递归实现Code分析练习1需求背景、限制条件、化简汉诺塔就是一个由柱子和盘子组成的玩具,它有一些玩法上的限制,主要是规定了盘子移动有限制。想理解到递归本质,汉诺塔是个不错的载体。怎么体会?在盘子移动的过程中。#盘子的......
  • 【Linux】Linux Bash Shell 教程
    LinuxBashShell入门教程Linuxbash(Bourne-AgainSHell)是一种为GNU操作系统编写的命令行解释器,它是大多数Linux发行版中最常用的shell。Bash提供了一种强大的方式来控制和管理操作系统,支持命令历史记录、别名、管道、重定向、变量、条件判断、循环以及自定......
  • 使用MySQL Shell 8.4.1-LTS 直接将数据复制到 MySQL实例
     在之前的文章中,我谈到了如何使用MySQLShell通过多线程过程来转储和加载数据,以及如何以不同格式导出表数据,然后可以将这些数据导入到新的MySQL实例中。这篇文章将讨论我们如何直接将数据复制到另一个MySQL实例,而无需执行单独的转储和加载操作。在开始这个演示之前,我按......
  • 以Top-Down思维去解决问题——递归
    目录递归的基础递归的底层实现(不是重点)递归的应用场景编程中两种解决问题的思维自下而上(Bottom-Up)自上而下(Top-Down)自上而下的思考过程——求和案例台阶问题案例易位构词生成案例递归和for循环(迭代法)很像,都是通过循环去完成一件事。但采用Top-Down思维去设计的递归结构,又会......
  • Luogu P4425 转盘 题解 [ 黑 ] [ 线段树 ] [ 贪心 ] [ 递归 ]
    转盘:蒟蒻的第一道黑,这题是贪心和线段树递归合并的综合题。贪心破环成链的trick自然不用多说。首先观察题目,很容易发现一个性质:只走一圈的方案一定最优。这个很容易证,因为再绕一圈回来标记前面的和等前面的标记完之后继续走是等价的,并且再绕一圈甚至可能更劣。于是,我们只用走......
  • powershell 创建winform窗体 T2 : 自动配置相机网卡参数
    <#脚本功能说明:选择要配置的相机网卡,点击配置按键,自动配置参数#2024.08.29#>#获取管理员权限if(-NOT([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]"Administrator......
  • Shell脚本的高级部分
    grep、awk、sed号称是shell编程的三剑客1、cut--提取,从命令结果中提取对应的内容准备数据1.txt111:aaa:bbb:ccc222:ddd:eee:fff333:ggg:hhh444:iiicut后面的-c的意思是按照字符选取内容参数英文含义-d'分隔符'delimiter指定分隔符-fn1,n2fields分割以后显示......
  • vue对象深拷贝、浅拷贝(对象之间的=赋值会存在浅拷贝)
    vue对象深拷贝、浅拷贝浅拷贝: 将A对象赋值给B对象,修改B对象的属性和方法会影响到A对象的属性和方法。深拷贝: 将A对象赋值给B对象,修改B对象的属性和方法不会影响到A对象的属性和方法。原因:复杂类型的赋值是浅拷贝,直接赋值会导致双向修改解决的方法:将浅拷贝转换成深拷贝解决......