Ответ 1
Вы можете использовать опцию -quit
для find
:
find <dir> -maxdepth 1 -type d -name '*foo*' -print -quit
Я хотел бы сделать это в Bash:
Я играл с командой find, но немного смутился. Любые предложения?
Вы можете использовать опцию -quit
для 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}"
Это лучше, чем другое решение оболочки, потому что
${dir}
будет пустым)=~
(если вам это нужно, это зависит от вашего шаблона)find
)например:
dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print | head -n1)
echo "$dir1"
или (Для лучшего решения оболочки см. ответ Адриана Фрюхвирта)
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"
Отредактированный заголовок -n1 на основе комментария @hek2mgl
Далее на основе комментариев @chepner
dir1=$(find . -type d -maxdepth 1 -print | grep -m1 'foo')
или
dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print -quit)