파일 회전

파일 회전

파일에 쓰는 응용 프로그램이 있습니다. 응용 프로그램을 실행하기 전에 파일을 회전하고 싶습니다.

즉, 기존 파일을 덮어쓰지 않고 , (및 로 이름 변경 )이 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부터 시작하여 번호가 매겨집니다).

관련 정보