rsync include 흥분이 매우 느립니다.

rsync include 흥분이 매우 느립니다.

rsync패턴과 일치하는 파일을 복사하는데 사용할 때https://unix.stackexchange.com/a/2503/288916이것은 작동하지만 매우 느립니다. find일치하는 파일을 더 빠르게 찾으세요. (10배 이상 빨라진 것 같습니다.) 이게 정상인가요? 이에 대해 취할 수 있는 조치가 있나요?

더 나은 전략은 찾기를 사용하고 일치하는 결과만 하나씩 복사하는 것입니다( scp또는 사용 rsync).


예제 명령(이 명령의 기능을 보려면 연결된 질문도 참조하세요):

rsync -am --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/

답변1

비교할 때 find실제로 rsync사과를 사과와 비교하는 것이 아니라는 점을 기억하세요.

  • find소스 파일 트리만 스캔하고,
  • rsync소스 파일 트리를 스캔할 뿐만 아니라 해당 대상 파일(크기, 날짜 시간, 권한, 소유권)과 메타데이터를 비교하여 소스 파일을 대상 파일에 복사해야 하는지 확인합니다.

나는 GPFS에 익숙하지 않지만클러스터 파일 시스템, 이는 네트워크에 의해 파일 액세스가 제한될 수도 있음을 의미합니다. 그러나 처음으로 파일 시스템을 실행한 후 Linux 기반 시스템은 메모리를 기반으로 후속 액세스를 위해 파일 트리를 캐시하려고 시도합니다. 이 최적화만으로도 140,000개 파일로 구성된 트리의 속도를 30배 향상시킬 수 있었습니다.

rsync비교를 위해 질문에 표시된 구현 에 더 가까운 다음 코드를 고려할 수 있습니다 . find합계를 고려하기 전에도 mkdir해당 원시 데이터보다 약 200배 느린 것으로 나타났습니다 cp( :연산을 방지하기 위해 무작동(no-op)을 앞에 붙입니다).

cd ~/LaTeX &&
    find . -type f -name '*.pdf' |
        while IFS= read -r src
        do
            dst=~/Output/"$src"
            if [ ! -f "$dst" ] || [ "$(stat -c '%s-%Y' -- "$src")" != "$(stat -c '%s-%Y' -- "$dst")" ]
            then
                mkdir -p -- "${dst%/*}"
                cp -p -- "$src" "$dst"
            fi
        done

확실히 그렇게 똑똑하지는 않지만, rsync나는 이것이 공정한 출발점이라고 믿습니다.

rsync마지막으로 다음 명령을 사용하여 파일을 선택하려면 find그렇게 할 수도 있습니다.

cd ~/LaTeX &&
    find . -type f -name '*.pdf' -print0 |
        rsync -av --files-from - --from0 ./ ~/Output/

그렇지 않은 경우 find … -print0교체 -print하고 삭제하십시오 --from0. 극단적인 파일 이름(줄 바꿈 및 기타 특이한 문자가 포함된 파일 이름)에 문제가 있을 수 있지만 대부분의 파일 이름에서는 계속해서 문제 없이 작동합니다.

관련 정보