2016-03-25 2 views
2

Я использую AWS CLI для копирования файлов из ведра S3 в моей машине R с помощью команды, как показано ниже:Как использовать AWS CLI скопировать только файлы в S3 ведро, которые соответствуют заданному шаблону строки

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

Работает так, как ожидалось, т.е. копирует все файлы в my_bucket_location, которые имеют «транс» в имени файла в этом месте.

Проблема, с которой я столкнулась, заключается в том, что у меня есть другие файлы с похожими соглашениями об именах, которые я не хочу импортировать на этом этапе. В качестве примера, в списке ниже, я только хочу, чтобы скопировать первые два файла, а не последние два:

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" 
    ) 

Пожалуйста, обратите внимание, что я могу использовать только информацию о файле, о котором идет речь, то есть, что я хочу, чтобы импортировать файл с рисунком "^trans_\\d+", я не могу использовать тот факт, что другие нежелательные файлы содержат sum_ в начале , потому что это только пример, могут быть другие файлы с похожими именами, такими как «check_trans_120215.csv».

Я рассмотрел другие альтернативы, как показано ниже, но в надежде, что есть способ, чтобы настроить команду копирования, чтобы не идти вниз либо из этих маршрутов:

  • риэлторами все элементы в ведре> с помощью регулярных выражений в R для указать файлы, которые я хочу> только импортировать эти файлы
  • Сохранение команды копирования, как это> удалить ненужные файлы на R машине после копирования

ответ

3

альтернативы, которые вы перечислили самые лучшие варианты, поскольку S3 CLI не поддержка regex.

Use of Exclude and Include Filters:

В настоящее время нет никакой поддержки для использования групповых символов в стиле UNIX в параметры пути комманд. Однако в большинстве команд есть --exclude "" и --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.

Смежные вопросы