用于查找目录树的 Find 命令

5 find

是否有任何等效的命令或选项find可以搜索目录树?我想通过树向后查看具有给定名称的文件。例如,假设我在 /usr/local/share/bin 中,我想搜索一个名为foo. 理想情况下,我希望命令按以下顺序查找文件:

  1. /usr/local/share/bin/foo
  2. /usr/local/share/foo
  3. /usr/local/foo
  4. /usr/foo
  5. /foo

我知道我可以把这样的东西写成一个 shell 函数,但我希望有一个像 gnu 一样丰富的命令find我可以利用。

Hau*_*ing 0

find_backwards () {
  test $# -ne 1 && return 2
  if [ -z "$find_backwards_recurse" ]; then
    pushd . &>/dev/null
    find_backwards_recurse=yes
  fi
  if [ -f "$1" ]; then
    echo "${PWD}/${1}"
    popd &>/dev/null
    find_backwards_recurse=
    return 0
  else
    if [ / != "$PWD" ]; then
      cd ..
      find_backwards "$1"
    else
      popd &>/dev/null
      find_backwards_recurse=
      return 1
    fi
  fi
}

start cmd:> pwd
/home/hl/tmp/tmp

start cmd:> find_backwards foo
/home/hl/tmp/foo
Run Code Online (Sandbox Code Playgroud)