내가 주면 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
하거나 생성한 다음 출력을 해당 참조와 비교할 수 있습니다.jot
ls -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