ไม่ควรยากอย่างน้อยสำหรับไฟล์เก็บถาวรที่เข้ากันได้กับรูปแบบแบบเก่าที่ชื่อไฟล์ถูกจัดเก็บในฟิลด์ขนาดคงที่ (100 ไบต์) แต่ฉันไม่รู้เครื่องมือที่สามารถเปลี่ยนชื่อ ไฟล์ในสถานที่ในการเก็บถาวร tar นอกจากนี้คุณยังต้องสร้างไฟล์ใหม่ด้วยไฟล์บีบอัดที่เก็บถาวร
มันควรจะง่ายยิ่งขึ้น แต่ฉันไม่รู้เครื่องมือที่มีอยู่ที่สามารถกรองไฟล์เก็บถาวรเปลี่ยนชื่อไฟล์ได้ คุณสามารถสร้างหนึ่งบนไลบรารี tar ในภาษาสคริปต์ ตัวอย่างเช่นที่นี่เป็นสคริปต์หลักฐานของแนวคิดที่จะเปลี่ยนชื่อไดเรกทอรีในน้ำมันดินที่เก็บโดยใช้Perl Archive::Tar
กับ มีการโหลดไฟล์เก็บถาวรลงในหน่วยความจำทั้งหมด นี้เป็นข้อ จำกัด Archive::Tar
ที่แท้จริงของ
#!/usr/bin/env perl
## Usage: tar-rename OLDPREFIX NEWPREFIX
use strict;
use warnings;
use Archive::Tar;
my ($from, $to) = @ARGV;
my $tar = Archive::Tar->new(\*STDIN);
foreach my $file ($tar->get_files()) {
my $name = $file->name;
$name =~ s~\A\Q$from\E($|/)~$to$1~;
$file->rename($name) unless $name eq $file->name;
}
$tar->write(\*STDOUT);
GNU tar ไม่สามารถเปลี่ยนชื่อสมาชิกได้ทันที แต่pax
(การแทนที่ POSIX สำหรับcpio
และtar
) ทำได้ อย่างไรก็ตามคุณไม่สามารถpax
อ่านและเขียนจากไฟล์เก็บถาวรได้ สิ่งที่คุณสามารถทำได้คือการเปิดเผยข้อมูลที่เก็บเป็นต้นไม้ประจำผ่านAVFSpax
และสร้างที่เก็บถาวรใหม่ด้วย สิ่งนี้จะเก็บชื่อไฟล์ (ยกเว้นที่ถูกแปลง), เนื้อหา, เวลาและโหมด แต่จะรีเซ็ตความเป็นเจ้าของไฟล์ให้กับคุณ
mountavfs
cd "~/.avfs$PWD/old.tgz#"
pax -w -s '!bar!baz!' -s '!bar/!baz/' . | gzip >new.tgz