web-dev-qa-db-ja.com

SSH経由でファイルパスを取得

リモートサーバーからの複数のファイルのパスが必要なAPIを開発しています。ファイルの数は100〜500の範囲です。ファイルは異なるフォルダーにあります。

だから、10-50回(ファイルの数に応じて)のように何度もループし、python AP​​Iでsshを使用してパスを取得しています。

しかし、この問題に対して最適化されたソリューションが必要です。現在、私はループが進むたびにssh接続を行っていますが、これは低速であり、最善のことでもありません。

ローカルマシンでリモートサーバーの/var/lib/mlocate/mlocate.dbを毎日コピーしてから、可能であれば、このdbを使用してlocateコマンドを使用してパスを見つけることを考えていました。 ORローカルマシンにリモートディレクトリインデックスを保存するのと同様に、より高速にクエリを実行できます。

これを達成する他のより良い方法は何ですか?

1
luv.preet

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を使用すると、ファイルの種類、パターン、深さなどについても細分化できます。


2
Robert Riedl