合并目录中的成对 TIFF 文件

合并目录中的成对 TIFF 文件

例如,假设给定目录有 1000 个名为 、 等的 TIFF 文件sample1.TIFFsample2.TIFF一直到sample1000.TIFF.我想合并每对文件:sample1.TIFFsample2.TIFF合并为sample1_2.TIFFsample3.TIFFsample4.TIFF合并为sample3_4.TIFF,依此类推。完成后,我将剩下 500 个合并的 TIFF 文件。如何使用 Unix/Perl/AIX 脚本来做到这一点?

答案1

要合并 TIFF,您可以使用tiffcp。对于您的示例,您可以在中编写一个简单的循环Perl

for ($i= 1; $i<= 100; $i+=2) { 
    $j = $i + 1;    
    system("tiffcp sample$i.TIFF sample$j.TIFF sample$i\_$j.TIFF");
}

更新:

如果 TIFF 文件上没有序列,即用 abc.tiff、def.tiff.. 等代替 sample1.tif、sample2.tif,并且需要根据时间戳合并文件夹中的前 2 个 tiff,那么你可以执行以下操作:

对 TIFF 文件进行排序时间戳使用ls -lt,然后从输出中提取 TIFF 文件名。您可以使用(见下文)执行此操作,awk或者如果您有权访问vim,则可以使用Ctrl-v从输出的每一行中删除不需要的列。

ls -lt | awk '$9 ~ "TIFF$" { print $9 } ' > sorted_TIFFs.list

获得排序的 TIFF 文件列表后,您可以遍历它们并tiffcp使用简单的Perl脚本运行。该脚本将sorted_TIFFs.list您在上一步中生成的作为命令行输入。

#!/bin/perl

$file=$ARGV[0];
open FILE, $file || die "Invalid filename";

while ($line=<FILE>) {
    chomp($line);
    $file1 = $line;
    if ($line = <FILE>)
    {
        chomp ($line);
        $file2 = $line;
        $prefix= $file1;
        $prefix =~ s/\.TIFF//; #to avoid a.TIFF_b.TIFF
        system("tiffcp $file1 $file2 $prefix\_$file2\n");
    } else {
       print "No matching TIFF file, odd number of total files.\n";
       exit;
    }
}

相关内容