代码之家  ›  专栏  ›  技术社区  ›  bukzor

UNIX:在$PWD以上的目录中查找文件

  •  2
  • bukzor  · 技术社区  · 15 年前

    我想查找具有特定名称的文件,但在目录中搜索 在上面

    我想要类似的东西:(功能除外)

    $ cd /some/long/path/to/my/dir/
    
    $ find -maxdepth -1 -name 'foo'
    /some/long/path/to/foo
    /some/foo
    

    最好使用Shell脚本或一行程序。


    在回答几个问题时,上述示例与实际发现之间的区别在于搜索正在进行 向上的 来自当前目录(并且-maxdepth不接受负参数)。

    4 回复  |  直到 15 年前
        1
  •  6
  •   Zarick Lau    14 年前

    有趣的问题,所以我试着给出一个有趣的答案:)

    find `( CP=${PWD%/*}; while [ -n "$CP" ] ; do echo $CP; CP=${CP%/*}; done; echo / ) ` -mindepth 1 -maxdepth 1 -type f -name 'foo'
    

    最后,附带的“find”命令是相当基本的用法。

        2
  •  2
  •   helpermethod    15 年前

    你可以用 Parameter Expansion:

    path="/some/long/path/to/my/dir"
    
    while [ -n "$var" ]
    do
      find $path -maxdepth 1 -name 'foo' 
      path="${var%/*}"
    done
    
        3
  •  2
  •   bukzor    15 年前

    FILE=foo
    DIR=$PWD
    while [[ $DIR != '/' ]]; do
        if [[ -e $DIR/$FILE ]]; then
            echo $DIR/$FILE
        else
            DIR=`dirname $DIR`
        fi
    done
    
        4
  •  1
  •   Wrikken    15 年前

    如果您的意思是排除当前目录:

    find / -name 'foo' ! -iwholename "$PWD*"
    

    find  /some/ /some/long /some/long/path/ /some/long/path/to/ /some/long/path/to/my -maxdepth=1 -name='foo'
    

    所以我们所需要的只是一种改变的方法 /some/long/path/to/my/dir
    /some/ /some/long /some/long/path/ /some/long/path/to/ /some/long/path/to/my