列出除一个目录之外的所有目录

Far*_*had 5 linux bash shell

我有以下目录结构

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)

但这似乎不起作用。

问候,法鲁克·阿尔沙德。

pax*_*blo 5

与其尝试通过检查一次一个地处理这些事情,不如获取所有目录并过滤掉您不想要的目录:

find * -type d | egrep -v '^logs/|/logs/'
Run Code Online (Sandbox Code Playgroud)

grep简单地除去含有任一线路logs/在开始或/logs/任何地方。

这将比逐个单独检查每个目录要快得多。


Vin*_*yon 5

正如上面评论中提到的,您可以使用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)