Ubuntu下递归复制文件夹脚本——可复制所选文件夹及其子项到目标路径

德胜才,谓之君子;才胜德,谓之小人。—— 《资治通鉴•唐纪》

一.前因 — 减少重复工作

之前在ubuntu部署开发软件的运行环境时,需要将不同的文件夹下的内容复制粘贴到新机的特定位置,为了解决需要反复手动放置文件导致浪费时间的问题,研究了一下如何用脚本完成工作;下面先简单介绍一下脚本功能。

二.结果 — 不再苦恼ubuntu多文件夹多路径复制

使用以下提供的脚本可以将需要复制的文件夹及其子项进行递归复制,即将源文件夹中所有内容完全复制到目标文件夹中,如果是多个源文件路径复制到多个目标路径则需要自己配置多段同样的程序或者将程序略作修改(方法会在后面提及)。

三.经历 — 以一个文件夹(含子项)复制到目标路径举例

#!/bin/bash
#cd /
#源文件夹路径
home_doc_path="/home/exe"
#目标文件夹路径
goal_doc_path="/opt/exe"

function ergodic_file()
{
#判断目标文件夹是否存在,不存在则创建
   if [ ! -d ${goal_doc_path} ]; then
      mkdir -p ${goal_doc_path}
      #打印创建文件夹信息
      echo "make new: ${goal_doc_path}"
   fi

#复制主流程
   #判断源路径文件是否存在
   if [ -d ${home_doc_path} ]; then
      #遍历提取文件夹下的子文件/子文件夹并赋值给 file_exe
      for file_exe in `ls ${home_doc_path}`; do
         #打印子文件/子文件夹名字及完整路径,已屏蔽
         #echo "edc1: ${file_exe}"
         #echo "edc2: ${home_doc_path}"/"${file_exe}"
         #将源文件的完整路径名赋值给 total_file
         total_file=${home_doc_path}"/"${file_exe}
         #如果刚才遍历的源文件为文件夹则执行then后程序,反之执行else程序
         if [ -d ${total_file} ]; then
            #在目标路径创建源文件含有的文件夹
            mkdir -p ${goal_doc_path}"/"${file_exe}
            #打印目标文件夹路径信息
            #echo "edc3: ${goal_doc_path}"/"${file_exe}"
            #递归复制文件夹;$后的第一个为cp_doc_file的第一个参数$1,第二个为参数$2
            cp_doc_file ${total_file} ${file_exe}
         else
            #直接复制相应文件
            cp ${home_doc_path}"/"${file_exe} ${goal_doc_path}
            #打印复制的文件路径
            #echo "edc4: ${home_doc_path}"/"${file_exe}"
         fi 
      done
   else
      echo "home_exe_path do not have"
   fi

#config 库文件
sudo ldconfig
sudo ldconfig
}

function cp_doc_file()
{
   #打印参数一、参数二
   #echo "cef1: $1"
   #echo "cef2: $2"
   #将参数1文件夹下内容赋值给 file
   for file in `ls $1`; do
       #打印路径信息
       #echo "cef3: $1"/"${file}"
       #将需要复制的文件或文件夹的完整路径赋值给 total_file
       total_file=$1"/"${file}
       #判断源文件夹是否丢失文件
       if [ -d ${total_file} ]; then
          #在目标文件夹下创建不存在的文件夹
          mkdir -p ${goal_doc_path}"/"${2}"/"${file}
          #打印文件夹路径信息
          #echo "cef4: ${goal_doc_path}"/"${2}"/"${file}"
          #递归复制
          cp_doc_file ${total_file} $2"/"${file}
       else
          #将文件内容直接复制
          cp ${total_file} ${goal_doc_path}"/"${2}
          #打印复制到目标路径文件的路径信息
          #echo "cef5: ${total_file}"
       fi
   done 
}
#脚本调用运行函数
ergodic_file

四.使用注意及扩展

  1. 使用时可根据需要将打印信息的语句解除屏蔽或进行屏蔽。
  2. 可将以上脚本程序直接复制到“.txt”文件中,然后将文件更改后缀为“.sh”。
  3. 运行脚本前需要使用"chmod +x 文件名"将脚本设置为可运行文件。
  4. 如果复制的目标路径需要高级权限,可以使用"sudo ./文件名"来运行,如果不需要则可以直接使用"./文件名"来运行。
  5. 需要进行多个源路径文件复制到多个目标路径时除了前述提到的方法还可以将"ergodic_file"函数略作修改,使其含有两个输入变量(一个是源文件夹路径,一个是目标文件夹路径),然后多次调用带参函数ergodic_file即可。

欢迎在评论区评论或私信交流。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值