我想在Bash中这样做:
我一直在玩find命令,但有点困惑。有什么建议吗?
答案 0 :(得分:85)
您可以使用-quit
的{{1}}选项:
find
答案 1 :(得分:10)
pattern="foo"
for _dir in *"${pattern}"*; do
[ -d "${_dir}" ] && dir="${_dir}" && break
done
echo "${dir}"
这比提供的其他shell解决方案更好,因为
${dir}
将为空)=~
运算符(如果需要,则取决于您的模式)find
)答案 2 :(得分:8)
例如:
dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print | head -n1)
echo "$dir1"
或(对于更好的shell解决方案,请参阅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评论编辑头部-n1
接下来基于@chepner的评论
dir1=$(find . -type d -maxdepth 1 -print | grep -m1 'foo')
或
dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print -quit)