2011-09-27 3 views
2

私はbashスクリプトを作成しており、実行する必要があるタスクの1つは、curlでFTPサーバーに接続し、変更された.zipファイル。curlでbashスクリプトを使用してFTP経由でディレクトリ内の最後に変更されたファイルを取得する

私たちが見ているファイルの名前形式はMM_DD_YYYY_ALL.zipです。

は、これまでのところ私は<< >>に省略して、持っている:

export FILEPATTERN=_ALL.zip 

for FILE in `curl -u << SERVER INFO >> 2> /dev/null | grep ${FILEPATTERN} | awk -F\ '{print $9}'` 
do 
    ... 
    # Do stuff with each file to determine most recent version. 
    ... 
done 

ファイル名がYYYY_MM_DDフォーマットされていないという事実は、これはいくつかの簡単なトリミングや計算を行うことができない主な理由のようです。

最新の変更されたzipファイルの名前をこのリストから引き出す有効な方法はありますか?または、リストが生成されている間に実行できる処理がいくつかありますか?

乾杯。

答えて

4

複数のキーでsortコマンドを使用してファイル名をソートし、最後の行をtailで取得して最新のファイルを取得することができます。

ソートのフィールド区切り文字としてダッシュを使用する場合は-t-を指定し、数字のソートを取得する場合は-nを指定し、各フィールドを優先順位の順に並べる必要があります。フィールド指定子の形式は次のとおりです。年間だから、

-k, --key=POS1[,POS2]  start a key at POS1 (origin 1), end it at POS2 
          (default end of line) 

、フィールド3、あなたは-k3,4として、その4文字の幅とそれをリストアップする必要があります。

年、月、日の順に並べ替えると、すべてのファイルが日付順に並べられたリストになります。だからではなく、上記forループの

は、あなたが使用することができます。

FILE=`curl -u << SERVER INFO >> 2> /dev/null | grep ${FILEPATTERN} | awk -F\ '{print $9}' 
    | sort -n -t- -k3,4 -k1,2 -k2,2 |tail -1` 
+0

乾杯、それは行きます。あなたに戻ってきます。 –

+0

完璧に作業しました。おかげでPeter。 –

0

編集を:申し訳ありませんが、私はちょうどあなたが必要なファイルをリモートFTPサーバー上にあったことに気づきました。私は彼らがローカルだと思っていたので、あなたはFTPにアップロードしたいと思っていました。だから以下はすべて無関係です。

通常、私は次のようにします: ls -1rt /path/to/zips/*.zip | tail -n1

これは必ずしも良いとは限りませんが、ファイル名のスペースなどですが、ディレクトリに最新のファイル名が返されます。

もあります。日付範囲と名前を指定できます。あなたが何をしているかに応じて、最後のx分で作成されたファイルについて、毎分ディレクトリをスキャンすることを選ぶかもしれません。これには、複数の新しいファイルが選択されるという利点があります。

関連する問題