私はこれをBashでやりたい:
私はfindコマンドで遊んでいますが、少し混乱しています。助言がありますか?
find
の-quit
オプションを使用できます。
find <dir> -maxdepth 1 -type d -name '*foo*' -print -quit
pattern="foo"
for _dir in *"${pattern}"*; do
[ -d "${_dir}" ] && dir="${_dir}" && break
done
echo "${dir}"
これは、提供されている他のシェルソリューションよりも優れています。
${dir}
は空になります)=~
演算子に依存しないため、POSIX準拠のシェルで動作します(必要な場合はパターンによって異なります)find
)例えば:
dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print | head -n1)
echo "$dir1"
または(より良いシェルソリューションについては、AdrianFrühwirthの回答を参照してください)
for dir1 in *
do
[[ -d "$dir1" && "$dir1" =~ foo ]] && break
dir1= #fix based on comment
done
echo "$dir1"
または
dir1=$(find . -type d -maxdepth 1 -print | grep 'foo' | head -n1)
echo "$dir1"
@ hek2mglコメントに基づいて編集されたhead -n1
@chepnerのコメントに基づく次
dir1=$(find . -type d -maxdepth 1 -print | grep -m1 'foo')
または
dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print -quit)