使用bash找到包含字符串第一个文件夹名(Use bash to find first folder

2019-09-01 18:35发布

我想这样做在击:

  • 在当前目录中,找到包括在名称为“foo”的第一个文件夹

我一直在玩弄find命令,但有点困惑。 有什么建议?

Answer 1:

您可以使用-quit的选项find

find <dir> -maxdepth 1 -type d -name '*foo*' -print -quit


Answer 2:

pattern="foo"
for _dir in *"${pattern}"*; do
    [ -d "${_dir}" ] && dir="${_dir}" && break
done
echo "${dir}"

这比提供,因为其他的shell更好的解决方案

  • 这将是巨大的目录更快的图案为水珠的一部分,并在循环中没有检查
  • 实际上按预期工作时,有没有目录匹配您的模式(当时${dir}为空)
  • 它会在任何兼容POSIX的shell工作,因为它不依赖于=~运营商(如果你需要这取决于你的模式)
  • 它会包含在他们的名字换行工作目录(相对于find


Answer 3:

例如:

dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print | head -n1)
echo "$dir1"

或(为了更好的壳溶液看到阿德里安Frü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"

编辑头-N1基于@ hek2mgl评论

接下来根据@ chepner的评论

dir1=$(find . -type d -maxdepth 1 -print | grep -m1 'foo')

要么

dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print -quit)


文章来源: Use bash to find first folder name that contains a string
标签: bash shell find