Bash:列出所有只包含两个子文件夹的目录:folder1和folder2?

时间:2013-09-19 04:47:27

标签: bash

在标题中,有人可以帮助仅使用Bash来解答这个问题吗?

我花了一些时间想不通。感谢。

2 个答案:

答案 0 :(得分:3)

以下内容应列出仅包含两个文件夹folder1folder2的目录。

for i in $(find . -type d); do count=$(find $i -mindepth 1 -maxdepth 1 -type d | wc -l); [ $count -eq 2 ] && [ -d $i/folder1 ] && [ -d $i/folder2 ] && echo $i ; done

以上不关心文件夹是否包含其他文件。如果您只想确保目录folder1folder2,请说:

for i in $(find . -type d); do count=$(find $i -mindepth 1 -maxdepth 1 | wc -l); [ $count -eq 2 ] && [ -d $i/folder1 ] && [ -d $i/folder2 ] && echo $i ; done

[请注意,上述内容可能不适用于目录名称中的空格。]

答案 1 :(得分:1)

这将列出这些目录,而不会在搜索上出现多余的内容。

#!/bin/bash

function check {
    local DIR SUBFOLDERS=()
    for DIR; do
        readarray -t SUBFOLDERS < <(find "$DIR" -maxdepth 1 -mindepth 1 -type d)
        if [[ ${#SUBFOLDERS[@]} -gt 0 ]]; then
            [[ ${#SUBFOLDERS[@]} -eq 2 ]] && echo "$DIR"
            check "${SUBFOLDERS[@]}"
        fi
    done
}

check "$@"

使用

运行脚本
bash script.sh dir_to_search [optionally_another_dir_to_search ...]

示例:

bash script.sh .
bash script.sh "$HOME"
bash script.sh /var /usr