我想显示目录/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/
它会递归搜索吗?什么是只查找以大写或小写字母开头的目录名的命令?
尝试find
:
find /opt/BMC/patrol -type d -iname 'patrol*'
-type d
匹配目录,而-iname
是不区分大小写的匹配。'patrol*'
必须被引用为''
,否则外壳将在find
获得机会之前扩展*
。
默认情况下,find
会递归搜索(请参见下面的Edit 2)。
编辑ls
未针对此用例进行优化。ls -d
防止向下进入目录,这就是为什么您没有得到任何匹配。就grep
而言,^
在行的开头匹配,而不是在目录名之前的前导/
。因此,grep -i '/patrol'
将是一种查找以Patrol
或patrol
开头的名称的方法,但您仍然需要筛选到目录。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
并且CCD_ 26不存在于结果中。