Кто-нибудь достигал этой функции раньше? Это эквивалентно ls -ltr *xyz*
в unix, и я хотел бы добиться того же в моем коде потока данных облака. Любое руководство будет оценено по достоинству.
Спасибо.
3 ответа
Эту фильтрацию можно выполнить на стороне клиента. Вот пример использования клиентской библиотеки Java google-cloud
для доступа к API Google Cloud Storage.
В приведенном ниже примере перечислены все файлы в корневом каталоге корзины, соответствующие заданному шаблону регулярного выражения.
Я использовал регулярные выражения вместо шаблона глобуса, который поддерживают такие команды оболочки, как ls
, поскольку регулярные выражения более гибкие.
Я бы порекомендовал вам ознакомиться с документацией по библиотеке java для google-cloud
.
Примере
import com.google.api.gax.paging.Page;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.Storage.BlobListOption;
import com.google.cloud.storage.StorageOptions;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
/**
* An example which lists the files in the specified GCS bucket matching the
* specified regular expression pattern.
*
* <p>Run it as PROGRAM_NAME <BUCKET_NAME> <REGEX_MATCH_PATTERN>
*/
public class ListBlobsSample {
public static void main(String[] args) throws IOException {
// Instantiates a Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();
// The name of the GCS bucket
String bucketName = args[0];
// The regular expression for matching blobs in the GCS bucket.
// Example: '.*abc.*'
String matchExpr = args[1];
List<String> results = listBlobs(storage, bucketName, Pattern.compile(matchExpr));
System.out.println("Results: " + results.size() + " items.");
for (String result : results) {
System.out.println("Blob: " + result);
}
}
// Lists all blobs in the bucket matching the expression.
// Specify a regex here. Example: '.*abc.*'
private static List<String> listBlobs(Storage storage, String bucketName, Pattern matchPattern)
throws IOException {
List<String> results = new ArrayList<>();
// Only list blobs in the current directory
// (otherwise you also get results from the sub-directories).
BlobListOption listOptions = BlobListOption.currentDirectory();
Page<Blob> blobs = storage.list(bucketName, listOptions);
for (Blob blob : blobs.iterateAll()) {
if (!blob.isDirectory() && matchPattern.matcher(blob.getName()).matches()) {
results.add(blob.getName());
}
}
return results;
}
}
Использование только соответствия префикса
Если вместо этого вам нужно сопоставить только префиксы в именах объектов, Objects: list API поддерживает это.
При выполнении GET https://www.googleapis.com/storage/v1/b/bucket/o
в запросе необходимо указать параметр запроса prefix
. Это также поддерживается с помощью клиентской библиотеки java (вам нужно будет указать это при создании BlobListOption
, передаваемого в storage.list()
).
префикс
строка
Отфильтруйте результаты по объектам, имена которых начинаются с этого префикса.
Gsutil
gsutil
поддерживает такие запросы и выполняет фильтрацию исключительно на стороне клиента (в некоторых случаях он также выдает несколько запросов).
GCS поддерживает префиксные запросы, вы можете эффективно отображать xyz *; но чтобы перечислить xyz , вам нужно будет перечислить всю корзину и отфильтровать на клиенте.
Следующее может быть не совсем полезным для вашего варианта использования, но если вы хотите сузить результаты по определенному префиксу, а затем применить регулярное выражение для соответствия вашему окончательному регулярному выражению.
Storage storage = StorageOptions.getDefaultInstance().getService();
Bucket bucket = storage.get(bucketName)
BlobListOption blobListOption = Storage.BlobListOption.prefix(prefixPattern)
for (Blob blob : bucket.list(blobListOption).iterateAll()) {
System.out.println(blob);
}
Похожие вопросы
Новые вопросы
google-cloud-storage
Облачное хранилище Google - это сервис RESTful для хранения и доступа к вашим данным в инфраструктуре Google. Сервис сочетает в себе производительность и масштабируемость облака Google с расширенными возможностями безопасности и обмена. ВОПРОСЫ ТОЛЬКО ДЛЯ ПРОГРАММИРОВАНИЯ. Вопросы, которые не связаны конкретно с программированием, - это НЕВЕРНАЯ ТЕМА для переполнения стека
maven
, который позволяет легко извлекать зависимости. Причина в том, что вам нужно будет загрузить целый набор jar-файлов, чтобы удовлетворить все зависимости (т.е. зависимости ваших зависимостей и т. Д.). Если вы используетеmaven
или какой-либо из популярных инструментов управления зависимостями Java, строки, которые вам нужно добавить в конфигурацию для извлечения зависимостей, перечислены в списке здесь