Bash 如何正确重定向ls-d*/的输出?

Bash 如何正确重定向ls-d*/的输出?,bash,Bash,对命令行来说比较陌生,所以请容忍我 我应该在/usr/local中查找以数字结尾的目录。我已设法列出了以下目录: ls -d */ 但当我尝试使用任何带有通孔管道的设备时: find -name grep look 没有显示输出。我甚至尝试过只使用“*”通配符进行搜索,但没有结果 你知道我哪里出了问题吗?find命令应该可以做你想做的事情,从外观上看,你几乎做到了: find / -type d -name <directory_name> find/-type d-name

对命令行来说比较陌生,所以请容忍我

我应该在
/usr/local
中查找以数字结尾的目录。我已设法列出了以下目录:

ls -d */
但当我尝试使用任何带有通孔管道的设备时:

find -name
grep
look
没有显示输出。我甚至尝试过只使用“*”通配符进行搜索,但没有结果


你知道我哪里出了问题吗?

find命令应该可以做你想做的事情,从外观上看,你几乎做到了:

find / -type d -name <directory_name>
find/-type d-name
它将从根目录中查找具有指定名称的任何目录。如果您按照上面显示的方式运行该命令,我认为缺陷在于您没有指定开始搜索的目录。如果需要任何其他参数来指定,也可以使用手册页:

这是一个整体;在
/usr/local/
下查找名称以数字结尾的目录(并隐式打印结果)

使用
ls
的代码可能需要如下所示:

cd /usr/local || exit 1
ls -d */ | grep '[0-9]/$'
这将列出名称末尾带有斜杠的目录,因此您需要搜索名称,其中有一个数字后跟斜杠和名称末尾。这与
find
命令之间的一个区别是
ls
只列出
/usr/local
中的目录,而
find
将向下搜索目录层次结构。如果不希望
find
向下搜索层次结构,请这样说:

find /usr/local -maxdepth 1 -type d -name '*[0-9]'

(如果您将
-maxdepth 1
放在末尾,一些版本的
find
会对此嗤之以鼻并抱怨。)

您的命令行到底是什么样子的?您不能使用
find-name
来筛选标准输入。我最近的尝试是:ls-d/|tr'/'''| find-type d-name.[0-9]。
find
不读取其标准输入;
ls-d…|tr…
与此无关。您还需要提供一个或多个名称作为搜索位置的
find
。您可能在以下方面做得更好:
find$(cd/usr/local;ls-d*/|tr'/'')-type d-name'*[0-9]'
。这不是一个好的解决方案,但它基本上是有效的。啊,对不起。我想我有点不清楚。我不是在寻找一个特定的目录,而是在/usr/local中以数字结尾的任何目录。您可以用任何给定的目录替换
/
find“/path/to/some/dir/*[0-9]”-type d-maxdepth 1
试试这个:find/usr/local-type d|sed/[^0-9]*([0-9]\+)./\1/对于给定的需求,您不需要在
find
的输出上运行
grep
sed
。(1)通常,您只需要一个答案。您可以将此添加为另一个答案的替代方案,并用注释解释您为什么要在选项之间进行选择。(2) 如果目录名包含空格,则会出现问题。(3) 这不允许目录名以数字结尾。(4) 问题给出了
/usr/local
作为搜索目录;你可以用它来代替
/path/to/some/dir
。(5) 你真的不需要在一个命令可以执行的地方运行三个命令。这有一些问题。由于双引号,shell不会将
“/path/to/some/dir/*[0-9]”
扩展到名称列表中,因此
find
很有可能会报告它“没有这样的文件或目录”。要实现您的目标,请使用问题给出的名称(
/usr/local
)并指定
-name'*[0-9]'
作为过滤器之一。第三个答案…你很忙…这不会过滤以数字结尾的名字。除此之外,它工作得相当好,使用shell的本机功能生成名称并测试文件类型。不需要反斜杠;只有C shell不知道何时继续,除非通过添加反斜杠告诉它们。如前所述,一个分号是多余的,但这是相当小的(因此,在某种程度上,反斜杠是不好的,但也没有坏处)。
for file in /path/to/some/dir/*; do \
    if [[ -d $file ]]; then \
        echo $file; \
    fi \
done
find /usr/local -type d -name '*[0-9]'
cd /usr/local || exit 1
ls -d */ | grep '[0-9]/$'
find /usr/local -maxdepth 1 -type d -name '*[0-9]'