연속된 숫자 이름이 있는 파일에 누락된 내용이 있는지 어떻게 확인할 수 있나요? [복사]

연속된 숫자 이름이 있는 파일에 누락된 내용이 있는지 어떻게 확인할 수 있나요? [복사]

내가 주면 ls -1나는 이것을 얻을 것이다.

file_0001.jpeg
file_0002.jpeg
file_0003.jpeg
file_0004.jpeg
file_0005.jpeg
file_0006.jpeg
file_0007.jpeg
file_0008.jpeg
file_0009.jpeg
file_0010.jpeg
file_0011.jpeg
file_0012.jpeg
file_0013.jpeg
file_0014.jpeg
file_0015.jpeg
file_0016.jpeg
file_0017.jpeg
file_0018.jpeg
file_0019.jpeg
file_0020.jpeg
file_0021.jpeg
...
file_0999.jpeg

awk이러한 지속적인 증분 방식으로 일부 파일이 누락되었는지 확인하는 데 사용할 수 있는 방법이나 다른 도구가 있습니까 ?

답변1

bash셸을 사용하는 경우 "완벽한" 출력 참조 예제를 사용 seq하거나 생성한 다음 출력을 해당 참조와 비교할 수 있습니다.jotls -1

$ diff <(ls -1) <(seq -f 'file_%04g.jpeg' 999)

누락된 파일이 표시될 뿐만 아니라 관련 없는 파일도 찾아줍니다.

답변2

다른 답변은 찾는 방법을 정확하게 제공하지만어느파일이 없습니다. 원래 문제는일부보다 입력하기 쉬운 방법으로 파일이 누락되었는지 확인할 수 있습니다.

귀하의 목록은 wc 의 출력 ls -1이므로 wc로 파이프하면 마지막 항목의 이름과 일치하는 여러 파일이 제공됩니다.

ls -1 | wc -l

셀 경우아니요마지막 파일 이름과 일치하면 파일 중 하나가 누락되어야 합니다.

답변3

awk를 사용하여 누락된 콘텐츠를 필터링할 수 있습니다. GNU Awk에서는 다중 문자 FS를 지원하므로 결과를 다음으로 파이프할 수 있습니다.

awk -F'[_.]' ' $2 != prev+1 { print "file "  prev+1 " missing" }{ prev = $2 }'

또는 사용perl

perl -F'[_.]' -ane 'if ($F[1] != $prev+1) {printf "file %d missing\n",$prev+1}; $prev=$F[1]'

더 많은 공백이 예상되는 경우 awk누락된 파일 번호 범위를 인쇄할 수 있습니다. 위 내용을 수정하세요

awk -F'[_.]' ' $2 != prev+1 { print "file(s) "  prev+1 "-" $2-1 " missing" }{ prev = $2 }' file

답변4

for 루프를 사용하세요.

 for i in file_{0000..0999}.jpeg; do if !  test -e "$i" ; then echo "$i doesn't exist"; fi; done

스크립트로

#! /bin/bash
for i in file_{0000..0999}.jpeg
do 
if !  test -e "$i"
then
echo "$i doesn't exist"
fi
done

관련 정보