リモートサーバーからの複数のファイルのパスが必要なAPIを開発しています。ファイルの数は100〜500の範囲です。ファイルは異なるフォルダーにあります。
だから、10-50回(ファイルの数に応じて)のように何度もループし、python APIでsshを使用してパスを取得しています。
しかし、この問題に対して最適化されたソリューションが必要です。現在、私はループが進むたびにssh接続を行っていますが、これは低速であり、最善のことでもありません。
ローカルマシンでリモートサーバーの/var/lib/mlocate/mlocate.db
を毎日コピーしてから、可能であれば、このdbを使用してlocate
コマンドを使用してパスを見つけることを考えていました。 ORローカルマシンにリモートディレクトリインデックスを保存するのと同様に、より高速にクエリを実行できます。
これを達成する他のより良い方法は何ですか?
tree
は、すべてのファイルパスのリストの生成が非常に速いようです。 SSHを使用し、スクリプトのコンテキストでは、コマンドは次のようになります
ssh user@Host "tree -if --noreport /your/base/directory" > /tmp/tree.output
-iこれによりbatch-likeきちんとしたグラフィカルツリーではなく出力
-f各行のフルパスプレフィックスを印刷する
-noreportは、最後の2行をカットします。なぜならtree
は空の行と見つかったファイル/ディレクトリ
出力は次のようになります
/var
/var/backups
/var/backups/alternatives.tar.0
/var/backups/alternatives.tar.1.gz
/var/backups/apt.extended_states.0
/var/backups/apt.extended_states.1.gz
/var/backups/apt.extended_states.2.gz
/var/backups/aptitude.pkgstates.0
/var/backups/dpkg.Arch.0
/var/backups/dpkg.Arch.1.gz
シンボリックリンクが-l
などで表示される方法に関するオプションを確認するには、 こちらのマンページ をご覧ください。
find
も同じ目的に使用できます
ssh user@Host "find /your/base/directory" > /tmp/find.output
繰り返しますが、シンボリックリンクi n the man page の処理方法を確認することをお勧めします。find
を使用すると、ファイルの種類、パターン、深さなどについても細分化できます。