旋转文件

旋转文件

我有一个写入文件的应用程序。在运行应用程序之前,我想旋转文件。

换句话说;重命名现有文件,使其file.n变为file.n+1, (并重file.1命名为file.2),而不覆盖现有文件。

我可以编写一个脚本来执行此操作,但我想知道是否有更简单的方法?

答案1

我可以写一个脚本来做到这一点

如果你想节省一些时间,这里是 perl 版本:

#!/usr/bin/perl
use strict;
use warnings FATAL => qw(all);

# Rotate files (file -> file.1, file.1 -> file.2, etc).

if ($#ARGV < 0 || !-e -w $ARGV[0] || index($ARGV[0], '/') != -1) {
        print "Existing file basename required\n";
        exit 1;
}

my $name = $ARGV[0];

opendir my $dh, './';
my @files = ();
my $last = 0;
while (readdir $dh) {
        next if !($_ =~ m/^$name\.(\d+)$/);
        $last = $1 if $1 > $last;
}
close $dh;

for (my $i = $last; $i > 0; $i--) {
        rename "$name.$i", "$name.".($i + 1);
}

rename $name, "$name.1";

您只能对当前工作目录中的文件使用此功能。例如:

rotate whatever.file

如果附加了任何类型的路径,就会抛出错误。然而,修改以允许路径并不难。

另外,如果有 awhatever.file.0它将被忽略(它生成的文件从 1 开始编号)。

相关内容