Shell脚本实现从文件夹中递归复制文件_linux shell

需求

前两天碰到需要在十层左右的文件夹中提取文件的需求,于是写了此脚本。

如下面这样的文件结构:

复制代码 代码如下:

    dir1
    ├── a
    │   ├── b
    │   │   └── file1
    │   └── file2
    ├── c
    │   └── d
    │       ├── e
    │       │   └── file4
    │       └── file3
    └── file5

我们需要将其中的file1~file5提取出来放到另一个文件夹中。

脚本

脚本getfilefromdir.sh如下:

复制代码 代码如下:

#!/bin/bash
#desc: get file from directory
#example: sh getfilefromdir.sh A B

INIT_PATH=${1%/}
SAVE_PATH=${2%/}

function checksavepath() {
    if [ -d $SAVE_PATH ]
    then
        rm -rf $SAVE_PATH
    fi

    mkdir ${SAVE_PATH}
    touch $SAVE_PATH".log"
}

function getfilefromdir(){
    for file in ` ls $1`
    do
        if [ -d $1"/"$file ]
        then
            getfilefromdir $1"/"$file
        else
            local path="$1/$file"
            local name=$file
            if [ ! -f $SAVE_PATH"/"$name ]
            then
                echo "cp ${path} to ${SAVE_PATH}/${name}"
                cp ${path} "${SAVE_PATH}/${name}"
            else
                echo "${path} file already exists"
                echo "${path}" >> $SAVE_PATH".log" 2>&1
            fi
        fi
    done
}

checksavepath

for sfol in ${INIT_PATH}
do
    getfilefromdir ${sfol}
done

运行

复制代码 代码如下:

sh getfilefromdir.sh dir1/ dir2

第一个参数是源文件夹,第二个是目地文件夹(不需要提前创建)。

如果有同名文件,会存在dir2.log中

结果为:

复制代码 代码如下:

dir2
├── file1
├── file2
├── file3
├── file4
└── file5

时间: 2024-09-30 01:06:14

Shell脚本实现从文件夹中递归复制文件_linux shell的相关文章

遍历-如何读取一个大文件夹中全部xml文件。将其路径放入哪种容器

问题描述 如何读取一个大文件夹中全部xml文件.将其路径放入哪种容器 现在在一个大的文件夹中,包含了若干个子文件夹,每个文件夹可能包含N个xml,txt等其他文件.现在想通过遍历把这个大的文件夹中所有的xml文件保存到一个容器中.1.请问用什么容器比较好vector?2.最好能来个详细的例子 让鄙人学习下 解决方案 你这种方法用递归比较好,至于容器,你说的是将找到的文件的路径存放起来吧.那个就随便都可以.用List吧. public void findFileByEndStr(String di

用vbs实现按创建日期的顺序列出一个文件夹中的所有文件_vbs

问: 你好,脚本专家!如何按创建日期的顺序列出一个文件夹中的所有文件? -- CL 答: 你好,CL.您知道,如果我们雄心勃勃并且努力工作,我们会坐下来为您写一个脚本,以使用 WMI 返回一个文件夹中的所有文件.该脚本将获取有关所有这些文件的信息,并将该数据存储在未连接的记录集中.然后,在该记录集中设置排序顺序以按创建日期和时间对文件进行排列.(接着,我们进行大量的重复性工作,以将 WMI 的日期时间值转换为易读的日期时间格式.)最后,我们将记录集中的所有值回显到屏幕上.它需要花费大量时间并编写

求助啊 如何用process定位并打开VB.EXE所在文件夹中的.exe文件,该文件的位置在不同电脑上是不固定的

问题描述 求助啊如何用process定位并打开VB.EXE所在文件夹中的.exe文件,该文件的位置在不同电脑上是不固定的 解决方案 解决方案二:你可以做个窗口,让用户选择路径,然后把路径保存到文件.这是最简单的办法.复杂一点,你就遍历磁盘,找到VB所在的文件夹,然后写入文件.下次打开,发现文件里有路径,就不再遍历了.解决方案三:谢谢谢谢能不能直接定位该程序位置比如以下语句:DimFilePathAsNewSystem.IO.StreamWriter(AppDomain.CurrentDomain

c#-读取文件夹中的所有图片文件

问题描述 读取文件夹中的所有图片文件 我第一次读取的时候没有问题.在删除图片后再读取图片会读取错误,以下是我的代码各位帮忙看一下. 后台代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using System.Data; publ

Append打开指定文件夹中的数据文件就象这些文件在当前文件夹中一样_DOS/BAT

允许程序打开指定文件夹中的数据文件就象这些文件在当前文件夹中一样.如果在没有参数的情况下使用,则 append 命令显示附加的目录列表. 语法 append [;] [[Drive:]Path[;...]][/x:{on|off}][/path:{on|off}] [/e] 参数 取消附加文件夹列表. [Drive:}Path 指定要附加到当前文件夹的驱动器和文件夹.如果未指定驱动器,将默认使用当前驱动器.可以指定 [Drive:]Path 的多个项,各项之间要用分号隔开. /x:{on | o

请问如何复制选择的文件夹中的所有文件到另一文件夹

问题描述 不是已经知道了路径的,是可以自行选择任意路径文件夹的 解决方案 解决方案二:指定路径可以操作的,难道'变路径'的不行?肯定行发个链接吧解决方案三:引用1楼mking0412的回复: http://www.cnblogs.com/xiachufeng/archive/2010/08/07/1794631.html指定路径可以操作的,难道'变路径'的不行?肯定行发个链接吧 呃,我刚接触C#,想要编一个windows窗体程序,就是那种可以任意选择某个文件夹然后将其中的所有文件复制到任意选择的

appdata文件夹中的哪些文件可以删除

  其实在win 7系统中,appdata下有三个子文件夹local,locallow,roaming. 当你解压缩包时如果不指定路径,系统就把压缩包解到localtemp文件夹下,存放了一些解压文件,安装软件时就从这里调取数据特别是一些制图软件,体积非常大,占用很多空间. locallow是用来存放共享数据,这两个文件夹下的文件就用优化大师清理,一般都可以清理无用的文件. roaming文件夹也是存放一些使用程序后产生的数据文件,如 空间听音乐,登入 的号码等而缓存的一些数据,这些数据优化大师

Powershell小技巧--将文件夹中的大文件分成若干份_PowerShell

朋友有一文件夹,全部是EML文件,约20G.他需要把这20G文件按每个文件夹2G分成10个.于是乎写了以下脚本: #目标文件夹 $scrfile = "d:\test" #起始目录名 $directory = 0 #1825361100 #76547428 #判断当目录的文件数大于0时while循环为真 while( (dir -Path $scrfile -Filter *.eml ).count -gt 0) { #起始目录名为1 $directory++ #建立目录 New-It

Shell脚本中非交互式修改密码的两种方法_linux shell

今天在写一个shell脚本的时候发现需要设置用户的密码,而设置密码是交互式的,这样在脚本中显然是不太好的,因此上网查找资料,发现了以下两种常见的非交互式设置密码的方式: 1:使用chpasswd chpasswd其实是通过用户输入'用户名:密码'来更改一组用户的密码,还是一个可以批量修改密码的工具,具体的用法详见chpasswd用法,这里只做简单的介绍 格式:# echo 用户名:密码 | chpasswd 实例: 添加一个doiido的帐号,密码为123456 复制代码 代码如下: # ech