Оператор Perl-s спешит на помощь!
Создать исполняемый Perl-скриптoverwrite-smaller
:
#!/bin/perl
use warnings;
use strict;
use File::Copy;
my $file = shift;
(my $compressed = $file) =~ s/original/compressed/;
copy($compressed, $file) if -s $compressed < -s $file;
И запустить его для каждого файла в исходном каталоге:
find /home/user/original -type f -exec overwrite-smaller {} \;
Или, оказавшись в Perl, напишите также и поддерево, идущее туда:
#!/usr/bin/perl
use warnings;
use strict;
use File::Copy;
use File::Find;
find({no_chdir => 1,
wanted => sub {
my $file = $File::Find::name;
-f $file or return;
(my $compressed = $file) =~ s/original/compressed/;
copy($compressed, $file) if -s $compressed < -s $file;
}}, 'original');