当前位置: 首页 > 编程笔记 >

使用Bash Shell对目录中的文件实现递归式拷贝

弓泰
2023-03-14
本文向大家介绍使用Bash Shell对目录中的文件实现递归式拷贝,包括了使用Bash Shell对目录中的文件实现递归式拷贝的使用技巧和注意事项,需要的朋友参考一下

前言
    今天工作中遇到了一个问题,如果将目录A中的文件拷贝到目录B中(前提目录B没有该文件),并保持文件在目录A的结构。项目重点如下:

    需要在目录B中保持文件在目录A中的结构。假设A目录文件 A/test/1.txt,转移到目录B中应该是B/test/1.txt。同时还需要考虑目录B中是否存在test目录,多级目录就要考虑递归了。(还好,bash shell里写个目录递归遍历还是比较简单的。)
    需要考虑A中文件是否在B中已经存在同名文件,如果存在,则不需要拷贝。

    项目需求示例图如下:

实现
    项目需求有了,知道设计到递归,代码就很好写了。这里给出一个demo示例,供大家参考。

  

 #!/bin/bash 
   
  function recursive_copy_file() 
  { 
    dirlist=$(ls $1) 
    for name in ${dirlist[*]} 
    do 
      if [ -f $1/$name ]; then 
        # 如果是文件,并且$2不存在该文件,则直接copy 
        if [ ! -f $2/$name ]; then 
          cp $1/$name $2/$name 
        fi 
      elif [ -d $1/$name ]; then 
        # 如果是目录,并且$2不存在该目录,则先创建目录 
        if [ ! -d $2/$name ]; then 
          mkdir -p $2/$name 
        fi 
        # 递归拷贝 
        recursive_copy_file $1/$name $2/$name 
      fi 
    done 
  } 
   
  source_dir="/tmp/test/system" 
  dest_dir="/tmp/test/systemback" 
   
  recursive_copy_file $source_dir $dest_dir 
 类似资料:
  • 本文向大家介绍nodejs 递归拷贝、读取目录下所有文件和目录,包括了nodejs 递归拷贝、读取目录下所有文件和目录的使用技巧和注意事项,需要的朋友参考一下 先给大家介绍下nodejs 递归拷贝目录下所有文件和目录,具体代码如下所示: ps:下面看下Nodejs递归读取目录下的所有文件 递归读取当前目录下的所有文件。 总结 以上所述是小编给大家介绍的nodejs 递归拷贝、读取目录下所有文件和目

  • 本文向大家介绍vuejs使用递归组件实现树形目录的方法,包括了vuejs使用递归组件实现树形目录的方法的使用技巧和注意事项,需要的朋友参考一下 上篇文章我提到了通讯录的开发,里面的目录使用了vue的递归组件实现的树形目录,这篇文章就来讲讲如何实现树形目录吧! 首先实现效果如下,觉得菜单还是比较nice的是吧: 这边数据调用的是数据库的数据的,需要数据库进行数据的构造,这里涉及到java的构造多叉树

  • 问题内容: 如何递归计算Linux目录中的文件? 我找到了这个: 但是,当我运行它时,它返回以下错误。 查找:路径必须在表达式之前:¦ 问题答案: 这应该工作: 说明: 仅包含文件。 ( 而不是)将命令的标准输出重定向到命令的标准输入。 (字数计数的缩写)在其输入(docs)上计算换行符,单词和字节。 仅计算换行符。 笔记: 更换用在当前文件夹要执行的命令。 您也可以删除,以在计数中包含目录(和符

  • 问题内容: 我有此功能,以递归方式打印目录中所有文件的名称。问题是我的代码很慢,因为它每次迭代都必须访问远程网络设备。 我的计划是先从目录中递归加载所有文件,然后再使用正则表达式遍历所有文件,以过滤掉我不需要的所有文件。有谁有更好的建议? 这只是稍后的测试,我将不使用这样的代码,而是将与高级正则表达式匹配的每个文件的路径和修改日期添加到数组中。 问题答案: 假设这是你将要编写的实际生产代码,那么我

  • 我想列出指定目录中的所有文件以及该目录中的子目录。不应列出任何目录。 我该怎么解决这个?

  • 问题内容: 我正在尝试获取目录及其子目录中所有文件的列表。我当前的递归方法如下: 但是,我希望有一种非递归的方式(可能是现有的API调用)来执行此操作。如果不是,这是最干净的方法吗? 问题答案: 您始终可以使用堆栈(对于DFS)或队列(对于BFS)将迭代解决方案替换为迭代解决方案: