我正在研究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
脚本作为参数文件获取并递归查找。 我发现这是我的一个糟糕的解决方案。并提出一些改进问题:
pwd
命令打印出绝对地址(我试过,但没有成功)答案 0 :(得分:3)
您的脚本目前无效:
rec_search
,但似乎您错误地调用了rec
if[[
还有一些其他严重问题:
for file in `ls $1`
反对“从不解析ls
的输出”的建议,不适用于包含空格或其他空白字符的路径if
和for
的正文以便于阅读脚本可以像这样修复:
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
}