根据某些标准列出Bash中的所有子目录

时间:2015-11-04 09:14:36

标签: regex linux bash

我正在编写一个脚本,用于导航所有名为1298等内容的子目录,并检查每个子目录是否包含runs子目录。脚本中的后续操作需要进行检查。我怎样才能做到这一点?我设法写了这个:

# check that I am in a multi-grid directory, with "runs" subdirectories
for grid in ??; do
    cd $grid
    cd ..       
done

但是,??也匹配LS之类的内容,这是不正确的。关于如何修复它的任何想法?

下一步:在名为dd(数字/数字)的每个目录中,我需要检查是否存在名为runs的子目录,或者退出时出错。有关如何做到这一点的任何想法?我想过使用find -type d -name "runs",但它在子目录中递归查看,这是错误的,无论如何find找不到匹配项,我不知道如何在脚本中捕获它

2 个答案:

答案 0 :(得分:1)

遍历目录,报告缺少的子目录:

for dir in [0-9][0-9]/ ; do
    [[ -d $dir/runs ]] || { echo $dir ; exit 1 ; }
done

您可以在glob模式中使用字符类。模式之后的/(非\)使其仅匹配目录,即将跳过名为42的文件。

下一行显示“ $dir/runs是一个目录,或报告”。 [[ ... ]]引入了一个条件,有关详细信息,请参阅man bash-d测试目录是否存在。 ||是“或”,您可以将该行改为

if [[ ! -d $dir/runs ]] ; then
    echo $dir
    exit 1
fi

其中!代表“不”。

答案 1 :(得分:0)

首先使用以下命令查找名称为run的所有目录:

find . -type d -name runs

注意:要限制为一个级别,您可以使用find-maxdepth

通过删除/

之后的最后一个单词,从中提取上一个目录

尝试:

sed 's,/*[^/]\+/*$,,'