デフォルトではsearchコマンドに似たものを取得しようとしていますが、ディレクトリのリストが$PATH
異なり、検索中のファイルが実行可能ではありません。
ディレクトリリストは固定されており(PATHと同じ形式の変数に圧縮できます)、サブディレクトリにドロップダウンしたくありません。 bashにcomplete
オプションがあることを覚えていますが、そのセクションを最後まで読んでいましたが、見つかりませんでした。私は近いですか?
たぶん、次のようなものがあります(ファイルがあるとします~/lib
)。
> filepath -p ".:/etc:$HOME/lib:$HOME/bin" foo
/home/alexis/lib/foo
which
つまり、orのようなものを探していますが、which -a
実行可能ファイルに限定されてはいけません。実行可能ファイルだけを検索してはいけませんが、$PATH
問題を解決できます;-)。
ベストアンサー1
find
すでに複数の検索パスをサポートしています。
find . /etc ~/lib ~/bin -maxdepth 1 -name '*foo*'
または使用fd
findよりも速く、機能が豊富で、より美しいです。
fd --max-depth=1 foo . /etc ~/lib ~/bin
別の簡単な方法ですが、空白や改行のあるファイルでは機能しない可能性があります。
SearchPaths=(/etc ~/lib ~/bin)
shopt -s nullglob
eval printf "%s " "${SearchPaths[@]/%/*foo*}"
Bash配列を使って直接ファイル拡張を実行するより簡単な方法を見たようですが、今は覚えていません。