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]'