簡體   English   中英

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

[英]UNIX: find a file in directories above $PWD

我想找到一個包含特定名稱的文件,但在上述當前的direcotories搜索,而不是下面。

我想要類似的東西:(功能除外)

$ cd /some/long/path/to/my/dir/

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

Shell腳本或單行首選。


在回答幾個問題時,上述示例與實際查找之間的區別在於搜索從當前目錄向上進行(並且-maxdepth不采用否定參數)。

有趣的問題,所以我試着給出一個有趣的答案:)

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

有點精心設計,'while'循環將嘗試生成當前目錄的父路徑列表。 while循環不會生成/,所以我添加額外的'echo /'來覆蓋它。

最后,封閉的“查找”命令是相當基本的用法。

您可以使用參數擴展:

path="/some/long/path/to/my/dir"

while [ -n "$var" ]
do
  find $path -maxdepth 1 -name 'foo' 
  path="${var%/*}"
done

這有效,但並不像我希望的那么簡單。

FILE=foo
DIR=$PWD
while [[ $DIR != '/' ]]; do
    if [[ -e $DIR/$FILE ]]; then
        echo $DIR/$FILE
    else
        DIR=`dirname $DIR`
    fi
done

如果你的意思是排除當前目錄:

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

如果你的意思是:在路徑中的任何目錄中直接匹配,這將有效,但我的bash-fu不足以輕松獲得目錄列表:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM