【问题标题】:How to display directories that begins with small or capital letter in Linux?如何在 Linux 中显示以小写或大写字母开头的目录?
【发布时间】:2018-03-29 03:34:29
【问题描述】:

我想显示目录/opt/BMC/patrol/ 中以Patrol*patrol* 开头的所有目录名称。命令

ls /opt/BMC/patrol/ | grep -i '^Patrol*'

产生

Patrol3
Patrol3.16
PatrolAgent_3181.sh
patrol_cfg.sh

没错,但是有目录和文件,而不仅仅是目录。

命令ls -d /opt/BMC/patrol/*/ | grep -i '^Patrol*' 什么也没产生...

命令ls -d /opt/BMC/patrol/*/ | grep -i 'Patrol*' 产生

/opt/BMC/patrol/BMCINSTALL/
/opt/BMC/patrol/bmc_products/
/opt/BMC/patrol/cert_gg/
/opt/BMC/patrol/common/
/opt/BMC/patrol/Install/
/opt/BMC/patrol/itools/
/opt/BMC/patrol/Patrol3/
/opt/BMC/patrol/Patrol3.16/
/opt/BMC/patrol/perform/
/opt/BMC/patrol/rtserver/
/opt/BMC/patrol/temp2/
/opt/BMC/patrol/test/
/opt/BMC/patrol/testftp/
/opt/BMC/patrol/Uninstall/

它是否递归搜索?什么是只查找以大写或小写字母开头的目录名称的命令?

【问题讨论】:

  • 顺便说一句,迟来的欢迎来到这个网站!查看tourhow-to-ask page 了解有关网站运行方式的更多信息。

标签: linux grep directory ls text-search


【解决方案1】:

试试find

find /opt/BMC/patrol -type d -iname 'patrol*'

-type d 匹配目录,-iname 是不区分大小写的匹配。 'patrol*' 必须引用 '',否则 shell 将在 find 有机会之前扩展 *

find 默认情况下会递归搜索(请参阅下面的编辑 2)。

编辑 ls 未针对此用例进行优化。 ls -d 防止进入目录,这就是为什么你没有得到任何匹配。就grep 而言,^ 匹配行首,而不是目录名称前的前导/。所以grep -i '\/patrol' 将是一种查找以Patrolpatrol 开头的名称的方法,但您仍然需要过滤到目录。 find 旨在处理所有这些事情。

编辑2对于非递归,使用-maxdepth

find /opt/BMC/patrol -maxdepth 1 -type d -iname 'patrol*'

根据您的问题,我制作了一个包含以下内容的测试目录:

opt/BMC/patrol/
opt/BMC/patrol/BMCINSTALL/
opt/BMC/patrol/bmc_products/
opt/BMC/patrol/cert_gg/
opt/BMC/patrol/common/
opt/BMC/patrol/common/patrol.d/
opt/BMC/patrol/Install/
opt/BMC/patrol/itools/
opt/BMC/patrol/Patrol3/
opt/BMC/patrol/Patrol3.16/
opt/BMC/patrol/PatrolAgent_3181.sh
opt/BMC/patrol/patrol_cfg.sh
opt/BMC/patrol/perform/
opt/BMC/patrol/rtserver/
opt/BMC/patrol/temp2/
opt/BMC/patrol/test/
opt/BMC/patrol/testftp/
opt/BMC/patrol/Uninstall/

当我运行第一个命令(没有-maxdepth)时,我得到:

opt/BMC/patrol
opt/BMC/patrol/common/patrol.d
opt/BMC/patrol/Patrol3
opt/BMC/patrol/Patrol3.16

当我运行第二个命令(-maxdepth)时,我得到:

opt/BMC/patrol
opt/BMC/patrol/Patrol3
opt/BMC/patrol/Patrol3.16

并且common/patrol.d 不存在于结果中。

【讨论】:

  • 它可以工作,但它再次递归搜索,也在子目录中搜索,因为我得到/opt/BMC/patrol/ /opt/BMC/patrol/Patrol3 /opt/BMC/patrol/common/patrol.d /opt/BMC/patrol/Patrol3.16
  • @ag.lis 你想要非递归的吗?如果是这样,请edit your question 澄清。谢谢!
猜你喜欢
  • 2021-02-26
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
相关资源
最近更新 更多