如何告诉“查找”命令跳转到某个位置并进行搜索?

如何告诉“查找”命令跳转到某个位置并进行搜索?

我正在为 C++ 项目准备标头,我决定使用find来获取其他标头文件的包含选项。要列出正确的路径,我需要使用cd它,例如:

cd 'PATH/TO/HEADER/FILE'
find ../../../

只有这样我才能获取头目录列表以复制粘贴到头文件中。之后,我必须:

cd 'PATH/TO/MY/PROJECT'

切换回项目路径。

经常使用不方便cd,那么我可以告诉findcommand自动“跳转”到目录并搜索吗?我通读了手册页但无法弄清楚。

find PATH/TO/HEADER/FILE不是一个解决方案,因为我故意希望路径名以../../../.

答案1

只需在子 shell 中执行cdand即可:find

(cd 'PATH/TO/HEADER/FILE' && find ../../..)

这样,只有子 shell 的当前工作目录受到影响。

您可以将其设为函数或脚本,此处使用 GNU realpath

findfrom() (
  dir=${1?}; shift
  reldir=$(realpath --relative-to="$dir" .) || exit
  cd -- "$dir" && find "$reldir" "$@"
)

最新版本的 GNUenv还有一个-C/--chdir选项,可以在执行命令之前更改工作目录:

env -C PATH/TO/HEADER/FILE find ../../..

另请注意,您始终可以cd -返回到上次成功之前所在的目录cd

类似 csh 和类似 Korn 的 shell 还支持工作目录堆栈,您可以使用 和pushdpopd不是cd.在 中zsh,您可以cd通过选项自动使用该堆栈autopushd,并使用cd +2, cd -2... 导航该堆栈,或者使用数组$dirstack~2, ~+2,~-2波形符扩展来访问它。

相关内容