ファイルの回転

ファイルの回転

ファイルに書き込むアプリケーションがあります。アプリケーションを実行する前にファイルを回転させたい。

つまり、既存のファイルを上書きせずに(およびに名前を変更する)ようにfile.n既存のファイルの名前を変更します。file.n+1file.1file.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

任意のタイプのパスを追加するとエラーが発生します。しかし、パスを許可するように変更することは難しくありません。

また、存在する場合はwhatever.file.0無視されます(生成されるファイルは1から始まり番号が付けられます)。

おすすめ記事