繁体   English   中英

根据一些条件列出Bash中的所有子目录

[英]List down all sub-Directories in Bash based on some criteria

我正在写一个脚本导航名字类似的所有子目录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找不到匹配项,我不知道如何在脚本中捕获它。

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

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

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

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

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

哪里! 代表“不是”。

首先找到使用名称运行的所有目录:

find . -type d -name runs

注意:要限制在一个级别,可以将find-maxdepth一起使用

通过删除/后的最后一个单词,从中提取前一个目录

尝试:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM