如标题所示,有人可以仅使用 Bash 帮助回答这个问题吗?
我花了一些时间想不通。谢谢。
以下应列出仅包含两个文件夹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
[请注意,上述内容可能不适用于目录名称中的空格。]
这将列出这些目录,而不会在搜索中产生冗余。
#!/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