加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 07:18:14 所属栏目:安全 来源:网络整理
导读:需求 前两天碰到需要在十层左右的文件夹中提取文件的需求,于是写了此脚本。 如下面这样的文件结构: 我们需要将其中的file1~file5提取出来放到另一个文件夹中。 脚本 脚本getfilefromdir.sh如下: #!/bin/ #example: getfilefromdir. INIT_PATH =${1%/}span

需求

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

如下面这样的文件结构:

我们需要将其中的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/),转载请注明原文地址。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读