ディレクトリ内で一致するMD5とXMLを見つける

ディレクトリ内で一致するMD5とXMLを見つける

ディレクトリにMD5とXMLの両方があるかどうかを検索または確認するために使用できるbashスクリプトは何ですか?問題は、一部のユーザーがMD5とXMLを送信するのを忘れることがあるということです。ディレクトリにファイルがない場合、ディレクトリは処理されません。次のタスクは満足できません。

while read f; do echo "\"$f\""; done < <(ls -1) >> /tmp/log3

ベストアンサー1

一対のファイル(1つは「.xml」、もう1つは「.md5」)を探しているとします。次のようにします。

#!/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;
}

または1行で:

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

どちらも基本的に同じことを行います。

  • globシェルパターンを拡張し、一致するファイルのリストを取得するために使用されますxml

  • 次に、(sedスタイル)パターン置換を使用して.xml拡張子をaに変換します.md5。このrフラグは(パターンを変更する代わりに)「この値を返す」という意味なので、インラインでファイル名として使用できます。

  • filetestに渡して-f存在することを確認してください。

  • 一致するファイルがない場合は、「欠落している」ファイルが印刷されます。

md5 欠落しているXMLをテストするのは非常に簡単です。

frmoのコメントに従って - コンパイルエラーのために./file_list.plの実行が中断されました"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"r

これは2011年にPerl 5.14に追加されました。

回避策:

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

おすすめ記事