在 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
}

似乎工作正常。