[英]List down all sub-Directories in Bash based on some criteria
我正在写一个脚本导航名字类似的所有子目录12
, 98
等,并检查每一个包含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.