bash以递归方式查找目录中的文件

时间:2016-08-11 11:46:23

标签: bash recursion

我正在研究bash shell并且最近明白我没有得到涉及文件搜索的正确递归调用 - 我知道找到了这个但是我最近被要求实现某个搜索方式或其他。

我写了下一个剧本:

#!/bin/bash


function rec_search {
for file in `ls $1`; do
echo ${1}/${item}
if[[ -d $item ]]; then
rec ${1}/${item}
fi
done
}

rec $1

脚本作为参数文件获取并递归查找。 我发现这是我的一个糟糕的解决方案。并提出一些改进问题:

  1. 如何查找名称中包含空格的文件
  2. 我可以有效地使用pwd命令打印出绝对地址(我试过,但没有成功)
  3. 代码的其他合理改进

2 个答案:

答案 0 :(得分:3)

您的脚本目前无效:

  • 该函数定义为rec_search,但似乎您错误地调用了rec
  • 您需要在if[[
  • 中的“if”后面加一个空格

还有一些其他严重问题:

  • for file in `ls $1`反对“从不解析ls的输出”的建议,不适用于包含空格或其他空白字符的路径
  • 您应该缩进iffor的正文以便于阅读

脚本可以像这样修复:

rec() {
    for path; do
        echo "$path"
        if [[ -d "$path" ]]; then
            rec "$path"/*
        fi
    done
}

但最好不要重新发明轮子并使用find命令。

答案 1 :(得分:0)

如果您使用bash 4或更高版本(除非您在Mac OS X下运行此功能,否则可以使用**运算符。

rec () {
  shopt -s globstar
  for file in "$1"/**/*; do
    echo "$file"
  done
}