번호가 매겨진 1000 개의 파일 중 누락 된 파일 찾기


0

1000 개의 파일을 포함해야하는 폴더가 있습니다. out_x.dat, 어디서 x 1에서 1000 사이의 숫자입니다. ls out_* | wc -l, 나는 거기에 996 파일을 참조하십시오. 나는 네 명이 실종되었다는 것을 알고 싶다. 이것을 어떻게 할 수 있습니까? 나는 이것으로 기존 파일을 나열 할 수있다.

ls out* | awk -F '_' '{ print $2}' 

1000 파일 내에 존재하지 않는 것을 나열 할 수있는 무언가가 있습니까?


2
간단한 스크립트를 사용하여 차례로 각 파일의 존재를 확인할 수 있습니다. for (( i=1; i<=1000; ++i )); do [ -e out_$i.dat ] || echo out_$i.dat missing; done.
AFH

숫자가 4 자리 숫자로 지정되면 명령 행을 다음과 같이 처리 할 수 ​​있습니다. for (( i=1; i<=1000; ++i )); do printf -v n out_%04d.dat $i; [ -e $n ] || echo $n missing; done.
AFH

@AFH 또는 bash / ksh / zsh에서보다 간단하게 고정 폭 for i in {0001..1000}; do [ -e out_$i.dat ] ...; done 또 다른 옵션은 다음과 같습니다. diff <(ls out_* | sort -t_ -nk2) <(printf '%s\n' out_{1..1000}) # or 0001..1000
dave_thompson_085

@ dave_thompson_085 - 고마워, 나는 그 구조에 대해 잊어 버렸어. 사실, 우분투에서 bash 나는 그것을 발견했다. {01..1000} 시퀀스의 마지막 숫자에 필요한 자릿수로 채우기 동일한 결과를 제공합니다. 대조적으로 {1..1000} 선행 숫자가 없다.
AFH

@AFH는 매력처럼 작동합니다. 감사합니다!
sodiumnitrate

답변:


4

다음과 같이 간단한 스크립트를 사용하여 각 파일의 존재를 차례로 확인할 수 있습니다.

for (( i=1; i<=1000; ++i )); do [ -e out_$i.dat ] || echo out_$i.dat missing; done

숫자가 4 자리로 지정되면 명령 행을 다음과 같이 만들 수 있습니다.

for (( i=1; i<=1000; ++i )); do printf -v n out_%04d.dat $i; [ -e $n ] || echo $n missing; done

또는 @ dave_thompson_085 님의 의견에 감사드립니다.

for i in {0001..1000}; do [ -e out_$i.dat ]  || echo out_$i.dat missing; done

루프를 반복 할 이중 루프를 갖도록 수정하는 방법이 있습니까? out_$i_$j.dat?
sodiumnitrate

1
@ 나트륨 니트 레이트 - 물론, for 문은 중첩 될 수 있습니다. for i ...; do for j ...; do ...; done; done. 다음을 참고해야합니다. ${i}_$j, 같이 _ 변수 이름에서 유효한 문자입니다.
AFH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.