场景:备份系统创建 rar 存档并将其拆分为 100 MB 的部分。我想在此目录中找到编号最高的文件。
例如输入和输出:
输入:
Backup_UniqueName123_part1.rar
Backup_UniqueName123_part2.rar
Backup_UniqueName123_part3.rar
Backup_RandomName_part1.rar
Backup_RandomName_part2.rar
Backup_Server_part1.rar
Backup_Server_part2.rar
输出:
Backup_UniqueName123_part3.rar
Backup_RandomName_part2.rar
Backup_Server_part2.rar
答案1
尝试这个:
DIRPATH="/where/youre/files/are"
BASE=''
NUM=0
while read F; do
test -e "$F" || continue
FB=$(echo "$F" | sed 's/_part[0-9]*\.rar$//')
FN=$(echo "$F" | sed 's/.rar$// ; s/.*\([0-9][0-9]*\)$/\1/')
if test "$BASE" == "$FB" ; then
test $FN -gt $NUM && NUM=$FN
else
test -n "$BASE" && echo "${BASE}_part$NUM.rar"
BASE=$FB
NUM=$FN
fi
done < <(ls -1 "$DIRPATH")
解释:
- 我们从每个文件名中提取基本名称和编号
- 我们只保留最高数字
- 当遇到新的碱基名称时,我们会打印旧碱基名称和旧的最高数字
答案2
您还可以awk
处理文件名:
{
match($0, /(^.+)_part([0-9]+)\.rar/, parts);
key = parts[1];
new_count = parts[2];
old_count = data[key];
if (new_count > old_count) {
data[key] = new_count;
}
}
END {
for (key in data) {
print key, data[key];
}
}