60

Bashでこれを行いたい:

  • 現在のディレクトリで、名前に「foo」を含む最初のフォルダーを見つけます

私は find コマンドで遊んでいますが、少し混乱しています。助言がありますか?

4

3 に答える 3

91

-quit次のオプションを使用できfindます。

find <dir> -maxdepth 1 -type d -name '*foo*' -print -quit
于 2013-05-02T17:47:29.230 に答える
12
pattern="foo"
for _dir in *"${pattern}"*; do
    [ -d "${_dir}" ] && dir="${_dir}" && break
done
echo "${dir}"

これは、提供されている他のシェル ソリューションよりも優れています。

  • パターンはグロブの一部であり、ループ内でチェックされないため、巨大なディレクトリの場合は高速になります
  • パターンに一致するディレクトリがない場合、実際には期待どおりに機能します(その場合${dir}は空になります)
  • 演算子に依存しないため、POSIX準拠のシェルで動作し=~ます(これが必要な場合は、パターンによって異なります)
  • 名前に改行を含むディレクトリで機能します(対find
于 2013-05-02T19:31:41.207 に答える