美文网首页shellUbuntu
Shell递归目录处理文件

Shell递归目录处理文件

作者: 胡涂笔记 | 来源:发表于2019-05-14 16:06 被阅读2次

有时候我们需要递归一个目录,处理下面的每一个文件,保存在另外一个目录下,并且还需要保持相同的目录结构。

1. 完整脚本

下面是可以完成此功能的脚本(或者此Gist),需要修改执行自定义命令部分完成对应的功能。

#!/bin/bash
# @Author: Farmer Li
# @Date:   2019-05-14 14:32:34
# @Last Modified by:   Farmer Li
# @Last Modified time: 2019-05-14 15:47:08

usage() {
    echo "Usage: ${0} source_dir target_dir"
}

recursively_processing() {
    # Strip the last separator of the path
    source_dir=${1%/}
    target_dir=${2%/}
    pattern=$3
    for source_file in $( find $source_dir -name $pattern); do
        echo "Processing file: ${source_file}"
        src_dir_full=`dirname $source_file`
        dst_dir_full=${src_dir_full/$source_dir/$target_dir}
        if [[ ! -d $dst_dir_full ]]; then
            mkdir -p $dst_dir_full
        fi
        target_file="${dst_dir_full}/`basename $source_file`"

        # Run custom command here
        echo "Output to: ${target_file}"
    done
}

if [[ $# -eq 2 ]]; then
    recursively_processing $1 $2 "*.txt"
else
    usage
    exit 1
fi

整个脚本接受两个参数,源文件夹和目标文件夹。
recursively_processing函数接受三个参数:

  1. 源文件夹
  2. 目标文件夹
  3. 文件的pattern,这里默认是"*.txt"

2.知识点

只用关注recursively_processing函数:

  1. ${str%sub_str}:将str中的最后一个sub_str删除
  2. dirname:获取路径中的目录名
  3. basename:获取路径中的文件名,包括文件名后缀
  4. ${str/sub_str_old/sub_str_new}:将str中的第一个sub_str_old替换成sub_str_new

相关文章

  • Shell递归目录处理文件

    有时候我们需要递归一个目录,处理下面的每一个文件,保存在另外一个目录下,并且还需要保持相同的目录结构。 1. 完整...

  • 目录处理命令

    目录处理命令文件处理命令连接命令 mkdir(make directories) -p[目录名]-p 递归创建 ?...

  • shell下的常用命令

    1、shell下的常用命令-目录和文件操作 •rmdir [目录名] 例: rmdir/var/ftp 递归删除一...

  • 【*nux命令】zip

    命令参数 -r 递归处理,将指定目录下的所有文件和子目录一并处理。

  • shell 递归遍历目录

    该shell是递归遍历/home目录,并输出每个文件的大小 引荐自:https://www.jianshu.com...

  • MAC Shell 命令 find 简单应用

    MAC Shell 命令 find 简单应用 find命令行的例子: 查找目录 查找文件 递归删除指定名字的文件或...

  • Shell脚本递归遍历目录

    这里,主要通过该脚本来练习Shell函数的写法,其功能主要是用来递归地遍历Unix目录,列出其中的文件和目录,并且...

  • 【iOS开发】检测项目是否包含IDFA

    原理 grep -r shell命令,递归查找目录下的所有文件(包括子目录)中符合条件的字符串 检测项目是否包含I...

  • Day4 文件管理

    1.文件管理 (cp 复制) -v详细显示命令执行的操作 -r: 递归处理目录与子目录 -p: 保留源文件或...

  • 命令行

    chmod -R 700 /opt/oracle/ -R参数是递归 处理目录下的所有文件以及子文件夹 no suc...

网友评论

    本文标题:Shell递归目录处理文件

    本文链接:https://www.haomeiwen.com/subject/yyosaqtx.html