[英]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.