假设我在以下目录中:
/A-dir/B-dir/mydir/… some directories …/x-dir
我想find
从 搜索mydir
,但mydir
事先没有具体知道;它由当前工作目录定义,作为/A-dir/B-dir/
从当前工作目录“向上”移动时的第一个目录(此路径已明确指定)。这样,find
将搜索mydir
,但不会搜索任何其他目录B-dir
(否则,我可以使用
find /A-dir/B-dir/ -name … …
)。
答案1
find "${PWD%"${PWD#/A-dir/B-dir/*/}"}" ...
$PWD
( after中的第一个目录组件/A-dir/B-dir
)
或者:
find "${PWD%"${PWD#/*/*/*/}"}" ...
(前 3 个目录组件)
或者:
find "${PWD%"${PWD#/*/B-dir/*/}"}" ...
B-dir
(在 中最左边出现的组件之后的第一个目录组件$PWD
)。
使用zsh
,您还可以执行以下操作:
find ${(M)PWD#/*/B-dir/*/}
答案2
像这样的东西可能就是您正在寻找的:
#!/bin/bash
last="${PWD/*\/}"
while test / != "$PWD"
do
cd ..
this="${PWD/*\/}"
if test 'B-dir' = "$this"
then
find "$last" ...
break
fi
last="$this"
done
它假设您从 开始,/A-dir/B-dir/mydir/... some directories .../x-dir
并沿着树向上移动,直到到达B-dir
。此时,它会针对previousfind mydir...
的任何值运行该命令。mydir
B-dir
当前目录 ( PWD
) 在脚本运行时更新。通过操作目录路径字符串而不是隐式使用 来避免目录更改并不困难$PWD
,但我选择以这种方式实现它。