在标题中,有人可以帮助仅使用Bash来解答这个问题吗?
我花了一些时间想不通。感谢。答案 0 :(得分:3)
以下内容应列出仅包含两个文件夹folder1
和folder2
的目录。
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
以上不关心文件夹是否包含其他文件。如果您只想确保目录folder1
和folder2
,请说:
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