在bash 3.2中以递归方式循环遍历目录的可移植解决方案

时间:2015-03-09 05:07:45

标签: shell unix sh portability

我希望通过指定路径下的每个文件和目录递归循环,并回显该文件/目录的所有者名称

我发现这个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 "$1" ]; then
    if darwin; then
      stat -f "%Su" "$1"
    else
      stat -c "%U" "$1"
    fi
  fi
}

log_owners() {
  for file in $@; do
    echo $(owner "$file")"\t$file"
  done
}

我正在使用sh / bash 3.2

1 个答案:

答案 0 :(得分:0)

好吧,我刚刚意识到相当明显(使用递归):

loop() {
  for file in $1/**; do >/dev/null
    if [ -d "$file" ]; then
      loop "$file"
    elif [ -e "$file" ]; then
      echo $(owner "$file")"\t$file"
    fi
  done
}

似乎正常工作。