我正在编写一个脚本,用于导航所有名为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
找不到匹配项,我不知道如何在脚本中捕获它
答案 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,/*[^/]\+/*$,,'