스크립트 중단 처리

스크립트 중단 처리

120,000개에서 500,000개 이상의 파일을 반복해야 합니다. find아주 잘 처리되었습니다.

find $PWD -type f -path "fragments/*.pdbqt"

어떤 이유로 동일한 파일 세트를 동일한 순서로 다시 나열하고 싶습니다. 목록이 영숫자순으로 정렬되어 있는지, fstat전화번호 등 으로 정렬되어 있는지는 상관없습니다 . 계속하기 전에 전체 출력을 알아야 하므로 스크립트 실행 속도가 느려지므로 사용은 sort옵션이 아닙니다 . find이 작업을 수행할 수 있는 방법을 알고 있나요?

고쳐 쓰다. 내 문제를 제대로 설명하지 못했습니다. 내 스크립트가 그렇게 많은 수의 파일을 처리할 때 사소한 중단이 발생할 수 있으며 UPS가 다운될 수 있습니다. 내 스크립트는 중단된 부분부터 계속되어야 합니다. 남은 파일은 어떻게 처리하나요?

답변1

찾기 출력을 파일에 저장하고 스크립트에서 해당 파일을 처리할 파일 목록으로 사용하도록 합니다. 스크립트가 파일 처리를 마치면 파일 이름을 다른 파일에 쓰도록 합니다. 스크립트가 중단된 경우 grep스크립트를 다시 시작할 때 처리된 파일을 제외하는 것은 간단합니다. 예:

touch files_already_processed
while IFS= read -r file
do
    # skip file if already processed
    grep -q -e "$file" files_already_processed && continue
    # process the file
    # processing code goes here
    echo "$file" >> files_already_processed
done <files_to_process

답변2

find명령은 디렉터리 순서대로 파일을 반환합니다. 디렉토리 순서가 불안정합니다. 일부 파일 시스템에서는 파일을 추가하거나 제거하면 동일한 디렉토리에 있는 다른 파일의 순서에 영향을 미칠 수 있습니다.

정렬은 선택 사항이 아니라는 귀하의 진술에 의문이 있습니다. 각 파일을 매우 빠르게 처리하지 않는 한 파일 목록 작성은 매우 빠릅니다. 작업이 중단된 경우 다시 사용할 수 있도록 파일에 저장하세요.

무슨 일이 있어도 어디에서 멈추고 거기서부터 계속해야 하는지 알아야 합니다. 중간에 일부 복잡한 열거를 복원하는 것보다 이미 생성된 파일 목록에서 복원하는 것이 더 쉽습니다.

관련 정보