在 bash 3.2 中递归循环遍历目录的便携式解决方案
Portable solution to loop through a directory recursively in bash 3.2
我想递归循环遍历指定路径下的每个文件和目录,并回显file/directory的所有者和 姓名.
我发现这个 question 是一个很好的参考,但我想知道是否有 bash 3.2
可移植且更简单的问题解决方案。不使用 find
的解决方案会很好。
我也发现了shopt -s globstar
,就是不知道能不能便携
如果您查看我的脚本,您会发现 log_owners
只是循环遍历 $@
,所以问题可能出在我的 glob 模式中。我以为 log_owners $root/**
会遍历所有内容,但它没有。
# OSX check.
darwin() {
[ $(uname) = "Darwin" ]
}
# Get file/directory's owner.
owner() {
if [ -n "" ]; then
if darwin; then
stat -f "%Su" ""
else
stat -c "%U" ""
fi
fi
}
log_owners() {
for file in $@; do
echo $(owner "$file")"\t$file"
done
}
我正在使用 sh
/bash 3.2
。
好吧,我刚刚意识到相当明显的(使用递归):
loop() {
for file in /**; do >/dev/null
if [ -d "$file" ]; then
loop "$file"
elif [ -e "$file" ]; then
echo $(owner "$file")"\t$file"
fi
done
}
它似乎工作正常。
我想递归循环遍历指定路径下的每个文件和目录,并回显file/directory的所有者和 姓名.
我发现这个 question 是一个很好的参考,但我想知道是否有 bash 3.2
可移植且更简单的问题解决方案。不使用 find
的解决方案会很好。
我也发现了shopt -s globstar
,就是不知道能不能便携
如果您查看我的脚本,您会发现 log_owners
只是循环遍历 $@
,所以问题可能出在我的 glob 模式中。我以为 log_owners $root/**
会遍历所有内容,但它没有。
# OSX check.
darwin() {
[ $(uname) = "Darwin" ]
}
# Get file/directory's owner.
owner() {
if [ -n "" ]; then
if darwin; then
stat -f "%Su" ""
else
stat -c "%U" ""
fi
fi
}
log_owners() {
for file in $@; do
echo $(owner "$file")"\t$file"
done
}
我正在使用 sh
/bash 3.2
。
好吧,我刚刚意识到相当明显的(使用递归):
loop() {
for file in /**; do >/dev/null
if [ -d "$file" ]; then
loop "$file"
elif [ -e "$file" ]; then
echo $(owner "$file")"\t$file"
fi
done
}
它似乎工作正常。