diff --git a/scripts/menu.pl b/scripts/menu.pl index d89d07a..467ea1e 100644 --- a/scripts/menu.pl +++ b/scripts/menu.pl @@ -1129,6 +1129,44 @@ my %handlers = ( system( 'rm', '-rf', "$local_archive_dir/$_" ) for @selected_experiments; + + # Find related query and chart files by experiment prefix + my $belongs_to_experiment = sub { + my ($file) = @_; + return grep { $file =~ /^\Q$_\E_/ } @selected_experiments; + }; + + my @groups; + for my $group ( + [ 'Queries', $local_queries_dir ], + [ 'Charts', $local_charts_out_dir ], + ) { + my ( $label, $dir ) = @$group; + next unless -d $dir; + + my @files = + grep { $belongs_to_experiment->($_) } Util::find_files($dir); + push @groups, + { + label => sprintf( '%s (%d files)', $label, scalar @files ), + dir => $dir, + files => \@files, + } + if @files; + } + + # Ask which related files to delete as well + if (@groups) { + my @selected_labels = + TUI::select_from_list( "Also delete related files?", 1, + map { $_->{label} } @groups ); + + foreach my $group (@groups) { + next unless grep { $_ eq $group->{label} } @selected_labels; + system( 'rm', '-f', "$group->{dir}/$_" ) + for @{ $group->{files} }; + } + } }, '99. Drop Databases (Mars)' => sub {