ファイルに書き込むアプリケーションがあります。アプリケーションを実行する前にファイルを回転させたい。
つまり、既存のファイルを上書きせずに(およびに名前を変更する)ように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
任意のタイプのパスを追加するとエラーが発生します。しかし、パスを許可するように変更することは難しくありません。
また、存在する場合はwhatever.file.0
無視されます(生成されるファイルは1から始まり番号が付けられます)。