Find
如何告訴’find’命令跳轉到一個位置並蒐索?
我正在為一個 C++ 項目準備標頭檔,我決定使用它
find
來獲取其他標頭檔的包含選項。要列出正確的路徑,我需要使用cd
它,例如:cd 'PATH/TO/HEADER/FILE' find ../../../
只有這樣我才能獲得頭目錄列表以複製粘貼到標頭檔。在那之後,我不得不:
cd 'PATH/TO/MY/PROJECT'
切換回項目路徑。
經常使用不方便
cd
,能否告訴find
命令自動“跳轉”到目錄並蒐索?我通讀了手冊頁,但無法弄清楚。
find PATH/TO/HEADER/FILE
不是解決方案,因為我故意希望路徑名以../../../
.
只需在子shell中執行
cd
andfind
:(cd 'PATH/TO/HEADER/FILE' && find ../../..)
這樣,只有 subshell 的目前工作目錄受到影響。
您可以在此處使用 GNU 將其設為函式或腳本
realpath
:findfrom() ( dir=${1?}; shift reldir=$(realpath --relative-to="$dir" .) || exit cd -- "$dir" && find "$reldir" "$@" )
最新版本的 GNU
env
也有一個-C
/--chdir
選項,可以在執行命令之前更改工作目錄:env -C PATH/TO/HEADER/FILE find ../../..
另請注意,您始終
cd -
可以返回到上次成功之前所在的目錄cd
。csh-like 和 Korn-like shell 也支持一個工作目錄堆棧,您可以使用
pushd
和popd
而不是cd
. 在zsh
中,您可以通過選項告訴cd
自動使用該堆棧,並使用, …autopushd
導航該堆棧,或使用數組或, ,波浪號擴展訪問它。cd +2``cd -2``$dirstack``~2``~+2``~-2