我有以下目录结构
libs logs src etc .........
|-- logs
|-- src
|-- inc
Run Code Online (Sandbox Code Playgroud)
“logs”目录在里面无处不在。所以我想列出除“日志”之外的所有目录。什么是 shell 命令。
就像是
#!/bin/bash
for dir in `find * -type d`; do
if [[ ${dir} != "{logs}*" ]]; then
echo ${dir}
fi
done
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。
问候,法鲁克·阿尔沙德。
与其尝试通过检查一次一个地处理这些事情,不如获取所有目录并过滤掉您不想要的目录:
find * -type d | egrep -v '^logs/|/logs/'
Run Code Online (Sandbox Code Playgroud)
在grep简单地除去含有任一线路logs/在开始或/logs/任何地方。
这将比逐个单独检查每个目录要快得多。
正如上面评论中提到的,您可以使用egrep和| 分离模式或如下所示在 find 中定义所有内容
find . -type d -print
.
./logs1
./test
./logs
$ find . -type d -not -name logs -not -name logs1 -print
.
./test
Run Code Online (Sandbox Code Playgroud)