수십만 개의 파일을 원격 디렉터리에서 다른 원격 디렉터리로 복사합니다.

수십만 개의 파일을 원격 디렉터리에서 다른 원격 디렉터리로 복사합니다.

11.11.11.11/:/path/from(Ubuntu 시스템)에 있는 원격 디렉터리(SSH 활성화)가 있습니다.백만작은 .txt작은 파일, 간단한 ls명령 실행 및 /path/from/WinSCP를 사용하여 열기도 가능하므로 디렉터리 열기가 불가능합니다.백만 파일 수.

내 목표는 특정 이름 패턴을 가진 수천 개의 파일을 찾는 것입니다.그리고다른 원격 위치(예 22.22.22.22:/path/to: )에 복사합니다.

지금까지 시도한 내용은 다음과 같습니다.

scp --exec=`find /path/from -name 'A*random*' -mtime +0 -mtime -10` [email protected]:/path/to

/path/from/하지만 디렉터리에 실제로 수백만 개의 파일이 포함되어 있다고 말했듯이 그렇게 하는 데는 아주 오랜 시간이 걸립니다.

더 빠르게 만들기 위한 제안 사항이 있나요? 사용 rsync? 어떻게 해야 하나요? 마지막 수정 날짜를 사용하여 결과를 제한하는 방법만 알고 있으므로 find결과를 특정 숫자로 제한하려면 어떻게 해야 합니까 ?1000-mtime

답변1

아마도 find이를 결합 하여 cpio한 컴퓨터의 많은 파일에서 스트림을 생성하고 cpio다른 컴퓨터에서 파일을 추출할 수 있습니다.

ssh user@source "cd sourcedir && find ./ -xdev -name 'A*random*' -print | cpio -o -Bav -H crc" | ssh user@target "cd destinationdir && cpio -i -vumd"

이 (테스트되지 않은) 솔루션은 다음을 기반으로 합니다.https://www.netroby.com/view/3602. 여기서는 find및 의 매개변수에 대한 설명을 찾을 수 있습니다 cpio.

답변2

노력하다locate

이 응용 프로그램에는 find너무 느린 것 같습니다.

  • 파일을 찾는 더 빠른 도구가 있습니다.locate. locate최신 파일을 찾기 위해 업데이트해야 하는 데이터베이스를 사용합니다 .

  • updatedb사용된 데이터베이스를 생성하거나 업데이트합니다 locate. 데이터베이스가 이미 존재하는 경우 변경되지 않은 디렉터리를 다시 읽지 않도록 해당 데이터가 재사용됩니다.

    find이 업데이트 프로세스는 데이터베이스가 업데이트될 때보다 매우 빠릅니다 locate(그리고 모든 파일을 찾을 때보다 훨씬 빠릅니다 find).

용법

  • 만들다그리고 다음에는고쳐 쓰다데이터 베이스

    sudo updatedb
    
  • 찾다관련된 문서. locate몇 가지 유용한 옵션이 제공되지만 find.유용한 패턴귀하의 목적을 위해.

    scp수정한 다음 또는 와 결합 할 수 있는 두 개의 명령줄을 사용하는 것이 좋습니다 rsync.

    파일 수를 제한할 수 있습니다.--limit

    /path/from/하위 디렉터리에서만 검색하고 하위 디렉터리에서는 검색하지 않는 경우

    locate --regex --limit 1000 '/path/from/A.*random.*'
    

    /path/from/자체가 아닌 하위 디렉터리에서 검색하는 경우

    locate --regex --limit 1000 '/path/from/.*/A.*random.*'
    

    man locate자세한 내용은 참조하십시오 .

일반 메시지

  • 2019-02-12날짜당 하나의 하위 디렉터리( , 2019-02-13...) 와 같이 각 디렉터리에 너무 많은 파일이 없도록 여러 하위 디렉터리를 사용하는 등 이러한 파일이 작성되고 저장되는 방식을 수정해야 할 수도 있습니다.

    아니면 더 좋은 점은 많은 사진 관리자가 사진 파일을 저장하는 것처럼,

    • 매년 한 계층의 하위 디렉터리
    • 해당 연도의 각 월에 대한 다음 수준 하위 디렉터리
    • 파일을 저장하는 데 사용되는 매월 각 날짜의 마지막 수준 하위 디렉터리입니다.
  • 일부 파일을 삭제할 수도 있습니다(예: 너무 오래된 파일인 경우).

답변3

  1. tar, zip 또는 폴더 아래의 모든 항목을 하나의 source.tar파일로 압축합니다. tar -cf /sourcedirectory그러나 이 작업은 이제 하나의 파일에 100,000개 이상의 파일을 모두 포함하므로 용량이 커집니다.
  2. 원하는 방식으로 이 파일을 전송하세요.
  3. 대상에 도착하면 tar -xf source.tar100,000개 이상의 파일이 포함된 원래 폴더 구조로 다시 압축을 풀거나 압축을 풉니다.

관련 정보