디렉토리에 MD5와 XML이 모두 있는지 검색하거나 확인하는 데 사용할 수 있는 bash 스크립트가 무엇인지 아십니까? 문제는 일부 사용자가 MD5와 XML을 보내는 것을 잊어버리는 경우가 있다는 것입니다. 디렉터리에 파일이 없으면 디렉터리가 처리되지 않습니다. 다음 작업은 만족스럽지 않습니다.
while read f; do echo "\"$f\""; done < <(ls -1) >> /tmp/log3
답변1
한 쌍의 파일(하나는 ".xml"이고 다른 하나는 ".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;
}
또는 한 줄로:
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 실행이 중단되었습니다.'라는 메시지가 표시되면 정규식 플래그를 지원하지 않는 이전 버전의 Perl을 "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;
답변2
.md5
파일이 누락되었거나 .xml
파일이 누락된 시기를 감지하고 싶다고 가정합니다 .
패턴을 반복 *.md5
하고 *.xml
"다른 유형"의 해당 파일을 순서대로 검색합니다.
#!/bin/sh
for name in ./*.md5; do
if [ ! -e "${name%.md5}.xml" ]; then
printf '"%s" is missing its XML file\n' "$name"
fi
done
for name in ./*.xml; do
if [ ! -e "${name%.xml}.md5" ]; then
printf '"%s" is missing its MD5 file\n' "$name"
fi
done
확장은 ${variable%word}
값까지 확장되고 $variable
끝에서 일치하는 (가장 짧은) 문자열을 제거합니다. word
여기서는 루프 변수 값에서 알려진 파일 이름 접미사를 제거하는 데 사용합니다. 그런 다음 변수 값에 또 다른 접미사를 추가하고 이것이 기존 파일의 이름을 형성하는지 테스트합니다. 그렇지 않은 경우 적절한 메시지가 인쇄됩니다.
테스트해보세요:
$ touch file{1..5}.xml file{2..7}.md5
$ ls
file1.xml file2.xml file3.xml file4.xml file5.xml file7.md5
file2.md5 file3.md5 file4.md5 file5.md5 file6.md5 script
$ sh script
"./file6.md5" is missing its XML file
"./file7.md5" is missing its XML file
"./file1.xml" is missing its MD5 file