查找目录中编号最高的文件

查找目录中编号最高的文件

场景:备份系统创建 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];
    }
}

相关内容