Find

如何告訴’find’命令跳轉到一個位置並蒐索?

  • June 27, 2021

我正在為一個 C++ 項目準備標頭檔,我決定使用它find來獲取其他標頭檔的包含選項。要列出正確的路徑,我需要使用cd它,例如:

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

只有這樣我才能獲得頭目錄列表以複製粘貼到標頭檔。在那之後,我不得不:

cd 'PATH/TO/MY/PROJECT'

切換回項目路徑。

經常使用不方便cd,能否告訴find命令自動“跳轉”到目錄並蒐索?我通讀了手冊頁,但無法弄清楚。

find PATH/TO/HEADER/FILE不是解決方案,因為我故意希望路徑名以../../../.

只需在子shell中執行cdand find

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

這樣,只有 subshel​​l 的目前工作目錄受到影響。

您可以在此處使用 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-like 和 Korn-like shell 也支持一個工作目錄堆棧,您可以使用pushdpopd而不是cd. 在zsh中,您可以通過選項告訴cd自動使用該堆棧,並使用, …autopushd導航該堆棧,或使用數組或, ,波浪號擴展訪問它。cd +2``cd -2``$dirstack``~2``~+2``~-2

引用自:https://unix.stackexchange.com/questions/655992