1

如标题所示,有人可以仅使用 Bash 帮助回答这个问题吗?

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

4

2 回答 2

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

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

于 2013-09-19T05:46:48.500 回答
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
于 2013-09-19T09:03:02.160 回答