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

前端之家收集整理的这篇文章主要介绍了shell脚本从文件夹中递归提取文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

需求

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

如下面这样的文件结构:

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

脚本

脚本getfilefromdir.sh如下:

#!/bin/ #example: getfilefromdir.INIT_PATH=${1%/}<span style="color: #000000;">
SAVE_PATH
=${<span style="color: #800080;">2%/}

<span style="color: #0000ff;">function<span style="color: #000000;"> checksavepath() {
<span style="color: #0000ff;">if [ -<span style="color: #000000;">d $SAVE_PATH ]
<span style="color: #0000ff;">then
<span style="color: #0000ff;">rm -<span style="color: #000000;">rf $SAVE_PATH
<span style="color: #0000ff;">fi

<span style="color: #0000ff;"&gt;mkdir</span><span style="color: #000000;"&gt; ${SAVE_PATH}
</span><span style="color: #0000ff;"&gt;touch</span> $SAVE_PATH<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;.log</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;

}

<span style="color: #0000ff;">function<span style="color: #000000;"> getfilefromdir(){
<span style="color: #0000ff;">for <span style="color: #0000ff;">file <span style="color: #0000ff;">in <span style="color: #0000ff;"&gt;ls</span> $<span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;
<span style="color: #0000ff;">do
<span style="color: #0000ff;">if [ -d $<span style="color: #800080;">1<span style="color: #800000;">"<span style="color: #800000;">/<span style="color: #800000;">"$<span style="color: #0000ff;">file<span style="color: #000000;"> ]
<span style="color: #0000ff;">then<span style="color: #000000;">
getfilefromdir $<span style="color: #800080;">1<span style="color: #800000;">"<span style="color: #800000;">/<span style="color: #800000;">"$<span style="color: #0000ff;">file
<span style="color: #0000ff;">else<span style="color: #000000;">
local path=<span style="color: #800000;">"<span style="color: #800000;">$1/$file<span style="color: #800000;">"<span style="color: #000000;">
local name=$<span style="color: #0000ff;">file
<span style="color: #0000ff;">if [ ! -f $SAVE_PATH<span style="color: #800000;">"<span style="color: #800000;">/<span style="color: #800000;">"<span style="color: #000000;">$name ]
<span style="color: #0000ff;">then
<span style="color: #0000ff;">echo <span style="color: #800000;">"<span style="color: #800000;">cp ${path} to ${SAVE_PATH}/${name}<span style="color: #800000;">"
<span style="color: #0000ff;">cp ${path} <span style="color: #800000;">"<span style="color: #800000;">${SAVE_PATH}/${name}<span style="color: #800000;">"
<span style="color: #0000ff;">else
<span style="color: #0000ff;">echo <span style="color: #800000;">"<span style="color: #800000;">${path} file already exists<span style="color: #800000;">"
<span style="color: #0000ff;">echo <span style="color: #800000;">"<span style="color: #800000;">${path}<span style="color: #800000;">" >> $SAVE_PATH<span style="color: #800000;">"<span style="color: #800000;">.log<span style="color: #800000;">" <span style="color: #800080;">2>&<span style="color: #800080;">1
<span style="color: #0000ff;">fi
<span style="color: #0000ff;">fi
<span style="color: #0000ff;">done<span style="color: #000000;">
}

checksavepath

<span style="color: #0000ff;">for sfol <span style="color: #0000ff;">in<span style="color: #000000;"> ${INIT_PATH}
<span style="color: #0000ff;">do<span style="color: #000000;">
getfilefromdir ${sfol}
<span style="color: #0000ff;">done

运行

getfilefromdir. dir1/ dir2

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

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

结果为:

本文出自十年后的卢哥哥博客(http://www.cnblogs.com/lurenjiashuo/),转载请注明原文地址。

猜你在找的Shell相关文章