Bash - 매개변수 목록이 너무 깁니다.

Bash - 매개변수 목록이 너무 깁니다.

scp원격 서버에서 로컬 컴퓨터로 약 115,000개의 json 파일이 포함된 큰 폴더를 가져오고 싶습니다 .

다음과 같은 것을 사용한다고 가정해 보겠습니다.

scp username@remote:/remote_path/*.json /local_path/

그러나 이 작업을 수행하려고 하면 다음과 같은 응답을 받습니다.

argument list too long

그럼 파일을 어떻게 전송하나요?

답변1

개별 파일 대신 전체 디렉토리를 전송하는 것을 고려하십시오.

scp -r username@remote:/remote_path /local_path/

전송량이 너무 많아 .json이름이 단일 디렉터리로 끝나는 파일만 전송하려는 경우에는 다음을 고려해 볼 수 있습니다 rsync(전송되는 항목을 필터링하는 데 더 나은 기능이 있음).

rsync -av --include='*.json' --exclude='*' username@remote:/remote_path/ /local_path/

다른 이름은 무시하고 이름이 로 끝나는 파일만 복사합니다 .json. 여기에는 종료 소스가 필요합니다 /.

이 옵션을 사용하면 자세한 작업 대신 -a파일 메타데이터(기본적으로 타임스탬프)도 전송하고 하위 디렉터리로 재귀하게 됩니다 (그러나 위의 제한 사항 rsync이 적용됨 ).--exclude-v

tar세 번째 옵션은 원격 디렉터리 또는 최소한 전송하려는 파일의 아카이브를 만든 다음 scp해당 아카이브를 로컬 시스템으로 전송하는 것입니다. 실제로 이 작업은 ssh시뮬레이션을 통해 한 번에 수행할 수 있습니다 scp -r.

ssh username@remote 'tar -c -f - -C /remote_path .' | tar -x -f - -C /local_path

관련 정보