如何在Linux中显示以小写或大写字母开头的目录?

时间:2017-10-17 12:31:53

标签: linux grep directory ls text-search

我想在目录/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/

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

1 个答案:

答案 0 :(得分:2)

尝试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