숫자로 시작하고 설명과 함께 하이픈을 연결하는 파일이 많이 있습니다. 예를 들어:
001 - awesomesauce 216 - stillawesomesauce
하위 디렉토리로 구성되어 있습니다.
그렇다면 bash
순서대로 숫자가 누락되었는지 확인하기 위해 스크립트나 해당 디렉토리 내부에 내장된 일부 보기를 어떻게 사용합니까? 즉 002
, 128
위의 예에서 , 등이 누락되었음을 다시 보고합니다 . 가능하다는 것을 알고 있으며 ls {000..216}\ -*
파일을 나열하고 찾지 못하면 오류가 발생합니다. 하지만 누락된 파일만 가져와 재귀적으로 수행하는 더 좋은 방법이 있습니까?
답변1
설정 에서 gnu
다음을 실행할 수 있습니다.
myarr=( $(find . -type f -name '[0-9][0-9][0-9]*' -printf '%f\n' | cut -c1-3 | sort -n) )
join -v1 <(seq -w ${myarr[-1]}) <(printf '%s\n' ${myarr[@]})
또는 를 사용하여 zsh
다음과 같이 시도해 볼 수 있습니다.
myarr=( **/[0-9][0-9][0-9]*(.one_'REPLY=${${REPLY:t}:0:3}'_) )
mynums=( {001..$myarr[-1]} )
print -l ${mynums:|myarr}
각 파일 이름에서 숫자(처음 3자리)를 추출하고 정렬한 후 결과를 배열에 저장합니다 myarr
. 그런 다음 마지막 인덱스 값(즉, 파일 이름에서 추출된 가장 높은 숫자)까지 mynums
의 숫자를 포함하는 또 다른 배열을 설정한 다음 다음을 사용합니다.001
매개변수 확장myarr
의 확장에서 값을 제거합니다 mynums
.
답변2
나는 썼다findmissing
파이썬 스크립트그게이 일을합니다. macOS에서 개발했지만 모든 플랫폼에서 작동합니다. Python 2.7 및 3.6에서 실행을 테스트했습니다.
다음은 실제 스크립트의 맛보기입니다.
$ cat sampleFile.txt | python findmissing.py -p "DSC003\.(\d+)"
12
13
14
16
17
18
22
23
24
...다음 파일이 제공되면 출력됩니다.
Id Name Type Size Created
1Dgt5ZFKT3zilwPZdiPyPmhM0Y3Fz_xo8 DSC003.010 bin 1.1 GB 2018-06-12 16:57:14
16QPadXBXPGIwiRhzMFRuY7tZkdIlJ1DI DSC003.011 bin 1.1 GB 2018-06-12 16:54:57
1zD492J3F42Azeoct82DMlXRRuWA8AUiY DSC003.015 bin 1.1 GB 2018-06-12 17:32:12
1bah8OM_F49BNeoct8M2DlXRRuOD8AUiY DSC003.019 bin 1.1 GB 2018-06-12 17:24:41
1eZfY4qn3Ol6w1BFafQn6YDy1uOU82NNA DSC003.020 bin 1.1 GB 2018-06-12 17:21:46
1x-P84Jq1cyuJCW2Opvy4m_qOjOHvAKtA DSC003.021 bin 1.1 GB 2018-06-12 17:27:16
1O4TjR8Cl31A5qxHkyVmhmukp4dofCO3t DSC003.025 bin 1.1 GB 2018-06-12 17:36:00