J'aimerais faire ceci dans Bash:
J'ai joué avec la commande find, mais un peu confus. Aucune suggestion?
Vous pouvez utiliser le -quit
option de find
:
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}"
C’est mieux que l’autre solution Shell fournie car
${dir}
sera vide)=~
_ opérateur (si vous en avez besoin, cela dépend de votre modèle)find
)par exemple:
dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print | head -n1)
echo "$dir1"
ou (Pour la meilleure solution Shell, voir la réponse d'Adrian Frühwirth)
for dir1 in *
do
[[ -d "$dir1" && "$dir1" =~ foo ]] && break
dir1= #fix based on comment
done
echo "$dir1"
ou
dir1=$(find . -type d -maxdepth 1 -print | grep 'foo' | head -n1)
echo "$dir1"
Edited head -n1 basé sur le commentaire @ hek2mgl
Suivant basé sur les commentaires de @ chepner
dir1=$(find . -type d -maxdepth 1 -print | grep -m1 'foo')
ou
dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print -quit)