Encontre MD5 e XML correspondentes em um diretório

1

Você sabe qual script bash eu posso usar para pesquisar ou descobrir se um diretório tem MD5 e XML? A questão é que alguns usuários às vezes esquecem de enviar o MD5 e o XML. Se um arquivo estiver faltando em um diretório, o diretório não será processado. O abaixo não está funcionando satisfatoriamente.

while read f; do echo "\"$f\""; done < <(ls -1) >> /tmp/log3
    
por tssh99 20.11.2016 / 11:18

1 resposta

0

Supondo que você esteja procurando por pares de arquivos - um chamado '.xml' e outro chamado '.md5', eu o colocaria assim:

#!/usr/bin/env perl
use strict;
use warnings;

foreach my $file ( glob ( "/path/to/dir/*.xml" ) ) {
   print "MD5 is missing for $file\n" unless -f $file =~ s/\.xml$/\.md5/r;
}

Ou como um folheto:

perl -e 'print join "\n", grep { not -f s/\.xml$/\.md5/r } glob ( "/path/to/*.xml" )'

Ambos fazem basicamente a mesma coisa

  • use glob para expandir um padrão de shell e obter uma lista de arquivos correspondente de xml files.

  • Em seguida, use um padrão de substituição (estilo sed) para transformar a extensão .xml em .md5 - o sinal r significa 'retornar este valor' (em vez de modificar o padrão) para que possamos use-o como um nome de arquivo ...

  • para entregar a -f filetest, para verificar se existe.

  • E, em seguida, imprima os arquivos "ausentes" se não houver um correspondente.

Isso deve ser bem trivial para se adaptar ao teste de XML ausente para md5s também.

Seguindo os comentários frmo - se você está recebendo: "Bareword found where operator expected at ./file_list.pl line 6, near "s/\.xml$/\.md5/r" syntax error at ./file_list.pl line 6, near "s/\.xml$/\.md5/r" Execução de ./file_list.pl abortada devido a erros de compilação "thta significa que você está usando uma versão antiga do perl que não suporta o r sinalizar para regex.

Isso foi adicionado em perl 5,14 em 2011.

Como solução alternativa:

my $xml_file = $file;
   $xml_file =~ s/\.xml$/\.md5/; 
print "MD5 is missing for $file\n" unless -f $xml_file =~ s/\.xml$/\.md5/r;
    
por 21.11.2016 / 15:08

Tags