数十万のファイルをリモートディレクトリから別のリモートディレクトリにコピーします。

数十万のファイルをリモートディレクトリから別のリモートディレクトリにコピーします。

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遅すぎるようです。

  • ファイルを見つけるためのより速いツールがあります。locatelocate最新のファイルを見つけるために更新する必要があるデータベースを使用してください。

  • updatedb使用したデータベースを作成または更新しますlocate。データベースがすでに存在する場合は、変更されていないディレクトリを再度読み取らないように、そのデータが再利用されます。

    findこの更新プロセスは、データベースが更新されるときよりも非常に高速ですlocate(そして、すべてのファイルが見つかったときよりもはるかに高速ですfind)。

使用法

  • 作るそして次に修正するデータベース

    sudo updatedb
    
  • 探す関連文書。locateいくつかの便利なオプションが提供されますがfind便利なパターンあなたの目的のために。

    scp変更してから、またはと組み合わせることができる2つのコマンドラインを使用することをお勧めします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日付ごとに1つのサブディレクトリ(、2019-02-13...)など、各ディレクトリにあまりにも多くのファイルがないように複数のサブディレクトリを使用するなど、これらのファイルの作成と保存方法を変更する必要があります。

    または、より良い点は、多くの写真マネージャが写真ファイルを保存するように、

    • 毎年1階層のサブディレクトリ
    • その年の各月の次のレベルのサブディレクトリ
    • ファイルを保存するために使用される毎月の各日付の最後のレベルのサブディレクトリ。
  • 一部のファイルを削除することもできます(たとえば、古いファイルの場合など)。

答え3

  1. tar、zip、またはフォルダの下のすべてのアイテムを1つのファイルsource.tarに圧縮します。tar -cf /sourcedirectoryただし、これは1つのファイルに100,000以上のファイルがすべて含まれているため、容量が大きくなります。
  2. 必要に応じてこのファイルを転送してください。
  3. 宛先に到着したら、tar -xf source.tar100,000を超えるファイルを含む元のフォルダ構造に再度解凍または解凍します。

関連情報