用于检索编号最高的文件夹/目录的bash脚本

用于检索编号最高的文件夹/目录的bash脚本,bash,Bash,我目前正在运行一个程序,重新排列基因组,以创建与参考基因组的最佳比对,并在这样做的同时生成许多文件夹,如alignment# 我无法知道这个程序在停止之前会运行多少次迭代,但最终的对齐方式是最好的(可以是从alignment5到alignment35),并且在文件夹中会有一个可预测的文件名,尽管文件夹可以更改 我需要一个bash脚本,它将在目录中查找并识别编号最高的目录,并将其存储为变量或类似的内容,理想情况下可以将其传递给其他程序 我只是想补充一点,我的脚本编写非常基本。如果你们能尽可能详细地

我目前正在运行一个程序,重新排列基因组,以创建与参考基因组的最佳比对,并在这样做的同时生成许多文件夹,如alignment#

我无法知道这个程序在停止之前会运行多少次迭代,但最终的对齐方式是最好的(可以是从
alignment5
alignment35
),并且在文件夹中会有一个可预测的文件名,尽管文件夹可以更改

我需要一个bash脚本,它将在目录中查找并识别编号最高的目录,并将其存储为变量或类似的内容,理想情况下可以将其传递给其他程序

我只是想补充一点,我的脚本编写非常基本。如果你们能尽可能详细地解释你们的答案,或者提供链接到用户友好的资源,我们将不胜感激。

这里有一个概念脚本:

#!/bin/bash
shopt -s extglob
DIR="/parent/dir" HIGHEST=''
for A in "$DIR"/alignment+([[:digit:]]); do
    B=${A#*/alignment}
    [[ -z $HIGHEST || B -gt HIGHEST ]] && HIGHEST=$B
done
[[ -n $HIGHEST ]] && echo "Highest: $DIR/alignment${HIGHEST}"
这假定文件名的前缀一致。
否则,您可以使用“sort-kn--numeric”,有关详细信息,请参阅“man sort”。

非常感谢,它的工作方式很有魅力。您能解释一下每一行都在做些什么吗?因为我从来并没有遇到过shopt,而且我还不清楚for循环中的许多语法。
shopt
启用
extglob
进行扩展模式匹配
'+([[:digit:]])
是一种扩展模式匹配形式,它匹配一个或多个数字。你不能用普通的地球仪
B=${A#/alignment}
删除路径名中除数字之外的所有内容。这是关于扩展全局绑定的一个很好的讨论:对于这个条件检查:
-z$HIGHEST
测试HIGHEST是否已经设置了值。如果为空,则表示为真实条件,最高值将设置为
$B
。否则(使用
|
)如果
B
大于先前在
HIGHEST
B-gt HIGHEST
)上设置的值,则
HIGHEST
也会使用
$B
中的新值刷新。非常感谢您的整洁脚本!extglob链接也非常有用,干杯D
ls -1 $directory | sort --numeric