私はこのようなファイルシステムの削除構造を持っています:
+ /measure
+ / 2013-09
+ / 2013-09-04
+ / fooinstrument
+ result03343445845.csv
+ result03343445846.csv
+ / barinstrument
+ result03343445847.csv
+ result03343445848.csv
それは階層構造でたくさんのファイルを含みます。私は持っています 読み取り専用 これへのアクセス SFTP (利用可能なCIFSのような他のプロトコルやサーバ上で実行されている特別なソフトウェアはありません) (それで、ソースホストにソフトウェアをインストールすることはできません。)
私は毎晩cronジョブを使って自分のデータベースにこれらのファイルをインポートしたいのです(cronジョブ自体は問題ありません)。だから、私はしたい すべての新しいファイルを再帰的にダウンロードする 私のローカルファイルシステムにそれから私のアプリケーション(コマンドラインパラメータとしてそのファイル名)にダウンロードされた各ファイルのパスを渡します、例えば:
/usr/local/bin/myapp -import /srv/localstorage/result03343445845.csv
この呼び出し myapp
重要な点ではありません。ダウンローダの出力を何らかのファイルにパイプ処理することによって、ダウンロードしたすべてのパスのリストを取得できる場合は、後でファイルリストを1行ずつ読み込んでアプリを起動できます。それは問題ありません。
元のディレクトリ階層は気にしません。私の主な目的は、ファイルをローカルファイルシステムに移動して、コマンドラインツールでファイル名を入力として使用できるようにすることです。したがって、サーバーによって与えられた深い階層の複製を持っているかどうか、またはすべてのファイルが同じディレクトリーに入るかどうかは、それほど重要ではありません。ファイル名はユニークな連載なので、後者はさらに興味深いかもしれません。したがって、すべてのファイルを1つのディレクトリにまとめて移動しても問題ありません。
+ / localstorage
+ result03343445845.csv
+ result03343445846.csv
+ result03343445847.csv
+ result03343445848.csv
私の問題の1つは、ソースファイルがサーバー上に永遠に残るということです。私がこれらのデータを収集するのは私だけではないので、サーバーはすでにダウンロードした古いファイルを削除しません。そのため、スクリプトはどのファイルが古いかを「記憶」する必要があります(=>ダウンロードしないでください)。これまでに取得されたすべてのファイルのローカルコピーを保持することによって。 (2つのファイルが同じファイル名を持っている場合、ファイル名はシリアル番号で作られているので、それらは安全に等しいと見なすことができます。だから内容の比較は必要ありません。)
もう1つ重要なことは、1年後にはおそらく30.000ファイル以上になるでしょう。私がすでに持っている古いものも含めて、毎晩すべてのファイルをダウンロードするのは合理的ではありませんでした。したがって、新しいファイルをダウンロードするだけで十分です(new =ローカルコピーにそのようなファイル名はありません)。
これを行うための最も簡単で最良の方法は何ですか Linux(Debian) ?私は使用するシェルスクリプトを考えました sftp
、 scp
あるいは多分 curl
?そのような脚本についてのあなたのアドバイスとあなたのアイデアをどうもありがとう!
//編集:ところで、あなたはどう思いますか?質問はServerfaultによく合いますか?