パス型ファイルの検索

パス型ファイルの検索

デフォルトでは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*'

または使用fdfindよりも速く、機能が豊富で、より美しいです。

fd --max-depth=1 foo . /etc ~/lib ~/bin

別の簡単な方法ですが、空白や改行のあるファイルでは機能しない可能性があります。

SearchPaths=(/etc ~/lib ~/bin)
shopt -s nullglob
eval printf "%s " "${SearchPaths[@]/%/*foo*}"

Bash配列を使って直接ファイル拡張を実行するより簡単な方法を見たようですが、今は覚えていません。

おすすめ記事