누적 크기 제한이 있는 원격 서버의 SCP

누적 크기 제한이 있는 원격 서버의 SCP

로컬에 디스크 공간이 충분하지 않고 파일이 더 큰 전체의 상호 교환 가능한 샘플이기 때문에 파일의 총 크기가 특정 제한을 초과하지 않도록 원격 서버에서 로컬 컴퓨터로 여러 파일을 복사하고 싶습니다. 즉, 어떤 파일이 다운로드되는지는 디스크 공간 제한 내에서 많은 파일이 다운로드되는 한 개별 파일이 어떤 순서로 다운로드되는지는 중요하지 않습니다.

파일은 정상적으로 다운로드되지만, 크기 제한을 초과하면 다운로드가 중지되고 현재 처리 중인 파일이 삭제됩니다.

SCP에 그런 능력이 있나요? RSYNC가 파일 크기를 제한할 수 있다는 것을 알고 있지만 이는 누적 파일 크기가 아닌 개별 파일에 대한 것입니다.

SCP나 RSYNC 모두 이를 수행할 수 없다면 다른 방법이 있습니까?

답변1

scp둘 다 rsync특정 요구 사항을 충족하지 않습니다. 그러나 완전한 접근 방식까지 표준 루프가 작동하는 것 같습니다.

#!/bin/bash

# A set of candidate files to transfer. The construct here assumes
# straightforward filename (no spaces or other strangeness)
files=( $(ssh -n remoteHost 'echo *.dat') )

cd /dest/dir

maxSize=1024                                       # MB allowance
startUsed=$(df -m . | awk 'NR==2 {print $3+0}')    # MB used at start
st=                                                # Status stop reason

for file in "${files[@]}"
do
    # Enough disk space
    thisUsed=$(df -m . | awk 'NR==2 {print $3+0}')
    [ $(( thisUsed - startUsed )) -ge $maxSize ] && st=used && break

    # Copy the next selected file
    scp -p remoteHost:"$file" .        # scp (using sftp)
    # scp -Op remoteHost:"$file" .     # scp (using scp)
    # rsync -t remoteHost:"$file" .    # rsync

    [ $? -gt 0 ] && st=copy && break
done

# All done
case "$st" in
    used)    echo "INFO: Allowance reached" >&2 ;;
    copy)    echo "ERROR: Copy failed: $file" >&2 ;;
esac

유일한 종속성 bash( POSIX 아님 sh)은 시작 부분의 파일 목록/배열입니다. 다른 방법으로 파일 목록을 생성할 수 있으면 종속성을 면제할 수 있습니다.

관련 정보