숫자로 시작하고 하이픈으로 연결된 파일이 많이 있습니다. 예를 들어:
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