2016-03-25 20 views
2

に一致するS3バケット内のファイルは、私は以下のようなコマンドを使用して、私のR・マシンにS3バケットからファイルをコピーするためにAWS CLIを使用しているコピーするAWS CLIを使用する方法:のみ与えられた文字列パターン

system(
    "aws s3 cp s3://my_bucket_location/ ~/my_r_location/ --recursive --exclude '*' --include '*trans*' --region us-east-1" 
    ) 

これは期待どおりに動作します。つまり、my_bucket_location内のファイル名に "trans"が含まれるすべてのファイルがその場所にコピーされます。

私が直面している問題は、この手順でインポートしたくない同様の命名規則を持つ他のファイルがあることです。私はだけでなく、最後の2、最初の2つのファイルをコピーしたいの下に一例として、リストに:

File list 
trans_120215.csv 
trans_130215.csv 
sum_trans_120215.csv 
sum_trans_130215.csv 

私は正規表現を使用していた場合、私はちょうど最初の二つの中に持って"^trans_\\d+"のようなことが、より具体的にすることができファイルを作成できますが、これはAWS CLIを使用しては不可能と思われます。ですから、私の質問は、以下のようなAWS CLIを使用してより複雑なパターンマッチングを行う方法ですか?

system(
    "aws s3 cp s3://my_bucket_location/ ~/my_r_location/ --recursive --exclude '*' --include '^trans_\\d+' --region us-east-1" 
    ) 

私は他の不要なファイルが起動時にsum_含むという事実を使用することはできません、私はパターン"^trans_\\d+"でファイルをインポートすること、すなわち、私が唯一の問題でファイルの情報を使用することができることに注意してくださいこれは単なる例であり、 "check_trans_120215.csv"のような類似の名前を持つ他のファイルが存在する可能性があるためです。

私は以下のような他の選択肢を検討し、これらの経路のいずれかを下って行く避けるために、コピーコマンドを調整する方法がある願っています

  • Rの中で正規表現を使用して>バケット内のすべての項目を一覧表示それだけは>あなたが列挙されている

答えて

3

選択肢がS3ための最良の選択肢ですコピーした後、R・マシン上の不要なファイルを削除しているとして、コピーコマンドを維持するそれらのファイル

  • をインポート>私が欲しいファイルを指定CLIはサポートregex

    Use of Exclude and Include Filters

    現在、 コマンドのパス引数でUNIXスタイルのワイルドカードの使用はサポートされていません。しかし、ほとんどのコマンドには ""と--include ""のパラメータを指定すると、 の結果が得られます。これらのパラメータは、 の特定のファイルまたはオブジェクトを除外または含めるパターンマッチングを実行します。次のパターン シンボルがサポートされています。

    *: Matches everything 
    ?: Matches any single character 
    [sequence]: Matches any character in sequence 
    [!sequence]: Matches any character not in sequence 
    
  • +1

    ああ、それは残念です。情報のおかげで –

    0

    私はちょうどこれを理解しなければならなかったことから、見つけるために他人のためにここにこれを置きます。ここで私が思いついたのです:

    s3cmd del $(s3cmd ls s3://[BUCKET]/ | grep '.*s3://[BUCKET]/[FILENAME]' | cut -c 41-) 
    

    grep検索文字列に正規表現を入れることができます。たとえば、削除する特定のファイルを検索していました(したがって、s3cmd del)。私の正規表現は次のようになりました:'2016-11-04.*s3.*[DN][RS].*'。あなたはあなたの使用のためにカットを調整する必要があります。また、s3cmd getで作業する必要があります。

    関連する問題