shell脚本从文件夹中递归提取文件

需求

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

如下面这样的文件结构:

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

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

脚本

脚本getfilefromdir.sh如下:

#!/bin/bash
#desc: get file from directory
#author: 十年后的卢哥哥(http://www.cnblogs.com/lurenjiashuo/)
#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-10-19 22:28:31

shell脚本从文件夹中递归提取文件的相关文章

c# -- 读取文件夹中的所有文件(备忘)

读取选取的文件夾下的所有.txt文件 private void button1_Click(object sender, EventArgs e){ if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { string foldPath = folderBrowserDialog1.SelectedPath; MessageBox.Show("已选择文件夹:" + foldPath, "选择文件夹提示"

C#遍历指定文件夹中的所有文件(转)

原文链接:http://www.cnblogs.com/qianqianfy/archive/2009/07/08/1518974.html 1. C#遍历指定文件夹中的所有文件 DirectoryInfo TheFolder=new DirectoryInfo(folderFullName); //---遍历文件夹 foreach(DirectoryInfo NextFolder in TheFolder.GetDirectories()) this.listBox1.Items.Add(Ne

PHP遍历、删除文件夹中的所有文件

1 <?php 2 header("Content-type:text/html;charset=utf-8"); 3 4 /** 5 * getDirFile 遍历文件夹中的所有文件 6 * @param $path 7 */ 8 function getDirFile($path){ 9 //判断是否是文件夹 10 if(is_dir($path)){ 11 //判断是否打开成功 12 if($handle = opendir($path)){ 13 14 //读取文件 15

C# 读取指定文件夹中的全部文件,并按规则生成SQL语句!

本实例的目的在于: 1 了解怎样遍历指定文件夹中的全部文件 2 控制台怎样输入和输出数据 代码: using System; using System.IO; namespace ToSql{ class ToSql{ static void Main(){ string path = System.Environment.CurrentDirectory; System.Console.WriteLine("输入要读取的文件夹名"); string name = Console.Re

C#读取指定文件夹中的所有文件

C#遍历指定文件夹中的所有文件 DirectoryInfo TheFolder=new DirectoryInfo(folderFullName);//遍历文件夹foreach(DirectoryInfo NextFolder in TheFolder.GetDirectories())   this.listBox1.Items.Add(NextFolder.Name);//遍历文件foreach(FileInfo NextFile in TheFolder.GetFiles())   thi

读取文件夹下所有子文件夹中的excel文件,并根据分类合并

解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独保存汇总文件,或者只保存成一个汇总文件. 场景描述:抓取了各个APP的使用数据,分散地保存在各个文件夹中.文件格式如下: 第一级分类:文件夹名 第二级分类:文件夹下xlsx文件名 第三级分类:每个xlsx文件中每行(具体的每条数据),但其中并没有该APP属于的二级分类和一级分类,需要为每条数据添加二

WPF获取读取电脑指定文件夹中的指定文件的地址

1 //保存指定文件夹中的指定文件的地址 2 3 string List<string> mListUri = new List<string>(); 4 5 //文件夹地址 6 7 string folderName = Environment.CurrentDirectory; 8 9 /// <summary> 10 /// 读取文件夹中指定文件 11 /// </summary> 12 public void LoadAllFile() 13 { 1

递归和非递归方法得到某文件夹中的全部文件和文件夹

/*******************************************************递归实现***************************************************/ /** * 获取某文件夹的所有文件 * @param filePath 获取文件的文件夹路径 * @param myFiles 保存文件的文件集合 * @return  所有的文件及文件夹 * @throws IOException */ public static Arr

提取文件夹中所有xml文件中的数据到txt(为人脸识别级联器使用的txt做准备)

[知识点]pugixml框架提取多个相同节点内容.遍历文件夹.保存到txt. xml文件由labelImg.exe软件标定图像生成.此博客把xml文件内容提取到txt中,为人脸识别opencv_annotation.exe.opencv_createsamples.exe.opencv_traincascade.exe服务 所有xml放到一个文件夹中,代码功能:遍历此文件夹,提取xml内容,保存到txt #include"pugixml\pugixml.hpp" #include<