지금 네가 무슨 생각을 하는지 알아"그냥 rsync를 사용하세요” 하지만 아쉽게도 이 시스템에는 rsync가 없으므로 다른 솔루션을 제안하고 싶습니다.
설정:
- 원본 서버에는 140,000개 이상의 파일이 포함된 업로드 폴더가 있습니다.(하위 디렉터리 없음)
- 대상 서버에는 140,000개 이상의 파일이 포함된 업로드 폴더가 필요합니다.
이를 스티커 메모만으로 마이그레이션이라고 부르겠습니다... 상황을 복잡하게 만들기 위해 서버 1은 새 업로드나 미리보기 이미지가 생성될 때마다 매일 새 파일을 계속 가져오므로 지금 이 점을 염두에 두셔야 합니다."1에서 2까지 파일을 복사하면 됩니다."20GB 이상의 복사본 작업이 완료되면 소스 서버에 이미 새 파일이 있기 때문에 다시 시작할 수 있기 때문에 작동하지 않습니다...
나의 솔루션 아이디어
- 소스에서 대상으로 전체 폴더 복사
- 대상 서버에서 가장 최근 생성 날짜를 찾아 원본 서버에서 시작점으로 사용
- 마지막 생성 날짜 이후 소스에서 타겟으로 모든 파일 복사(증분)
- 가능한 한 자주 이 작업을 수행하도록 크론을 설정하십시오.
내 질문
find /uploads/* -mtime -1 bash: /bin/find: Argument list too long
이제 bash 스크립트 루프 작성을 시작하기 전에 누군가 bash 스크립트 없이 이 작업을 수행할 수 있는 다른 방법, 즉 오래된 저수준 CLI를 제안할 수 있는지 궁금합니다.
답변1
해결책을 찾았지만 아직 해결책을 찾지 못했습니다. 아직 작업 중이에요.
파일 시스템 생성/수정 날짜를 신뢰할 수 있다고 가정하면 find를 사용하여 파일 목록을 생성하고 이를 텍스트 파일로 출력한 다음 루프를 사용하여 대상 서버를 scp할 수 있습니다. 조회 결과를 scp에 직접 제대로 보낼 수 없는 것 같습니다.
도우미 프로그램을 사용했어요SSH패스, 하지만 키 파일을 사용하는 것이 더 낫다는 것을 알고 있습니다.
대상 서버에서 원본 서버의 파일을 찾아 결과를 저장하고 결과를 하나의 디렉터리와 파일로만 제한합니다.
sshpass -p 'MyPassword' ssh [user@server] "find [path/to/look/in] -maxdepth 1 -mtime -1 -type f" > /tmp/last-24-hours-file-list.txt
출력 파일을 반복하고 각 파일에 대해 scp를 호출합니다.
while read filename; do sshpass -p 'MyPassword' scp -Crpv [user@server]:$filename [path/to/save/to]; done < /tmp/last-24-hours-file-list.txt