-1

我试图只复制 Bash 中最新版本的文件。

例如,在我下面的脚本中,我正在复制所有文件,但现在我需要复制最新版本(最新版本将作为文件名中的最后一个参数给出)。

我的文件名示例:

AAA_BBB_CCC_1
AAA_BBB_CCC_2  # I need to copy this file instead the above one because it has
               # _2 which means it is the latest version.

BBB_CCC_DDD_1
BBB_CCC_DDD_2  # I need to copy this file
4

1 回答 1

0

我很懒,所以我会为此使用 Perl。在“版本是名称末尾的下划线后跟数字”的基础上,您可以使用它来每行读取一个文件作为输入,并在输出中仅生成每个文件的最新版本:

#!/usr/bin/env perl
use strict;
use warnings;

my %files;

while (<>)
{
    chomp;
    my($base, $vrsn) = m/(.*)_(\d+)$/;
    $files{$base} //= $vrsn;    # Set if not yet defined
    $files{$base}   = $vrsn if ($vrsn > $files{$base});
}

foreach my $base (sort keys %files)
{
    print "${base}_$files{$base}\n";
}

您可以在任何需要的地方将其安装到您的管道中。

于 2013-05-23T19:31:35.653 回答