{"id":108095,"date":"2023-02-22T09:41:54","date_gmt":"2023-02-22T17:41:54","guid":{"rendered":"https:\/\/www.backblaze.com\/blog\/?p=108095"},"modified":"2023-07-11T09:56:55","modified_gmt":"2023-07-11T16:56:55","slug":"go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1","status":"publish","type":"post","link":"https:\/\/www.backblaze.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/","title":{"rendered":"Go Wild with Wildcards in the Backblaze B2 Command Line Tool 3.7.1"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"820\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204.png\" alt=\"\" class=\"wp-image-108097\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204.png 1440w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204-300x171.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204-1024x583.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204-768x437.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204-560x319.png 560w\" sizes=\"auto, (max-width: 1440px) 100vw, 1440px\" \/><\/figure>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p id=\"bzdropcap\">File transfer tools such as <a href=\"https:\/\/cyberduck.io\/\" target=\"_blank\" rel=\"noopener\">Cyberduck<\/a>, <a href=\"https:\/\/filezillapro.com\/\" target=\"_blank\" rel=\"noopener\">FileZilla Pro<\/a>, and <a href=\"https:\/\/www.panic.com\/transmit\/\" target=\"_blank\" rel=\"noopener\">Transmit<\/a> implement a graphical user interface (GUI), which allows users to manage and transfer files across local storage and any number of services, including cloud object stores such as <a href=\"https:\/\/www.backblaze.com\/cloud-storage\" target=\"_blank\" rel=\"noopener\">Backblaze B2 Cloud Storage<\/a>. Some tasks, however, require a little more power and flexibility than a GUI can provide. This is where a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Command-line_interface\" target=\"_blank\" rel=\"noopener\">command line interface (CLI)<\/a> shines. A CLI typically provides finer control over operations than a GUI tool, and makes it straightforward to automate repetitive tasks. We recently released version 3.7.0 (and then, shortly thereafter, version 3.7.1) of the <a href=\"https:\/\/github.com\/Backblaze\/B2_Command_Line_Tool\" target=\"_blank\" rel=\"noopener\">Backblaze B2 Command Line Tool<\/a>, alongside version 1.19.0 of the underlying <a href=\"https:\/\/github.com\/Backblaze\/b2-sdk-python\" target=\"_blank\" rel=\"noopener\">Backblaze B2 Python SDK<\/a>. Let\u2019s take a look at the highlights in the new releases, and why you might want to use the Backblaze B2 CLI rather than the AWS equivalent.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Battle of the CLI\u2019s: Backblaze B2 vs. AWS<\/h2>\n\n\n\n<p>As you almost certainly already know, Backblaze B2 has an <a href=\"https:\/\/www.backblaze.comhttps:\/\/www.backblaze.com\/docs\/en\/cloud-storage-s3-compatible-api\" target=\"_blank\" rel=\"noreferrer noopener\">S3-compatible API<\/a> in addition to its original API, now known as the B2 Native API. In most cases, we recommend using the S3-compatible API, since a rich ecosystem of S3 tools and knowledge has evolved over the years.<\/p>\n\n\n\n<p>While the AWS CLI works perfectly well with Backblaze B2, and we explain how to use it in our <a href=\"https:\/\/www.backblaze.com\/b2\/docs\/dev-quickstart-guide.html\" target=\"_blank\" rel=\"noopener\">B2 Developer Quick-Start Guide<\/a>, it\u2019s slightly clunky. The AWS CLI allows you to set your access key id and secret access key via either environment variables or a configuration file, but you must override the default endpoint on the command line with every command, like this:<\/p>\n\n\n\n<pre>% aws --endpoint-url https:\/\/s3.us-west-004.backblazeb2.com s3api \\\nlist-buckets<\/pre>\n\n\n\n<p>This is very tiresome if you\u2019re working interactively at the command line! In contrast, the B2 CLI retrieves the correct endpoint from Backblaze B2 when it authenticates, so the command line is much more concise:<\/p>\n\n\n\n<pre>% b2 list-buckets<\/pre>\n\n\n\n<p>Additionally, the CLI provides fine-grain access to Backblaze B2-specific functionality, such as application key management and replication.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Automating Common Tasks with the B2 Command Line Tool<\/h2>\n\n\n\n<p>If you\u2019re already familiar with CLI tools, feel free to skip to the <a href=\"#B2-CLI\">next section<\/a>.<\/p>\n\n\n\n<p>Imagine you\u2019ve uploaded a large number of WAV files to a Backblaze B2 Bucket for transcoding into .mp3 format. Once the transcoding is complete, and you\u2019ve reviewed a sample of the .mp3 files, you decide that you can delete the .wav files. You can do this in a GUI tool, opening the bucket, navigating to the correct location, sorting the files by extension, selecting all of the .wav files, and deleting them. However, the CLI can do this in a single command:<\/p>\n\n\n\n<pre>% b2 rm --withWildcard --recursive my-bucket 'audio\/*.wav'<\/pre>\n\n\n\n<p>If you want to be sure you\u2019re deleting the correct files, you can add the <code>--dryRun<\/code> option to show the files that would be deleted, rather than actually deleting them:<\/p>\n\n\n\n<pre>% b2 rm --dryRun --withWildcard --recursive my-bucket 'audio\/*.wav'\naudio\/aardvark.wav\naudio\/barracuda.wav\n...\naudio\/yak.wav\naudio\/zebra.wav<\/pre>\n\n\n\n<p>You can find a complete list of the CLI\u2019s commands and their options in the <a href=\"https:\/\/b2-command-line-tool.readthedocs.io\/\" target=\"_blank\" rel=\"noopener\">documentation<\/a>.<\/p>\n\n\n\n<p>Let\u2019s take a look at what\u2019s new in the latest release of the Backblaze B2 CLI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"B2-CLI\">Major Changes in B2 Command Line Tool Version 3.7.0 <\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">New <code>rm<\/code> command<\/h3>\n\n\n\n<p>The most significant addition in 3.7.0 is a whole new command: <code>rm<\/code>. As you might expect, <code>rm<\/code> removes files. The CLI has always included the low-level <code>delete-file-version<\/code> command (to delete a single file version) but you had to call that multiple times and combine it with other commands to remove all versions of a file, or to remove all files with a given prefix.<\/p>\n\n\n\n<p>The new <code>rm<\/code> command is significantly more powerful, allowing you to delete all versions of a file in a single command:<\/p>\n\n\n\n<pre>% b2 rm --versions --withWildcard --recursive my-bucket \\\nimages\/san-mateo.png<\/pre>\n\n\n\n<p>Let\u2019s unpack that command:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>%:<\/code> represents the command shell\u2019s prompt. (You don\u2019t type this.)<\/li>\n\n\n\n<li><code>b2:<\/code> the B2 CLI executable.<\/li>\n\n\n\n<li><code>rm:<\/code> the command we\u2019re running.<\/li>\n\n\n\n<li><code>--versions:<\/code> apply the command to all versions. Omitting this option applies the command to just the most recent version.<\/li>\n\n\n\n<li><code>--withWildcard:<\/code> treat the folderName argument as a pattern to match the file name.<\/li>\n\n\n\n<li><code>--recursive:<\/code> descend into all folders. (This is required with <code>--withWildcard<\/code>.)<\/li>\n\n\n\n<li><code>my-bucket:<\/code> the bucket name.<\/li>\n\n\n\n<li><code>images\/san-mateo.png:<\/code> the file to be deleted. There are no wildcard characters in the pattern, so the file name must match exactly. Note: there is no leading \u2018\/\u2019 in Backblaze B2 file names.<\/li>\n<\/ul>\n\n\n\n<p>As mentioned above, the <code>--dryRun<\/code> argument allows you to see what files would be deleted, <em>without<\/em> actually deleting them. Here it is with the \u2018*\u2019 wildcard to apply the command to all versions of the .png files in <code>\/images<\/code>. Note the use of quotes to avoid the command shell expanding the wildcard:<\/p>\n\n\n\n<pre>% b2 rm --dryRun --versions --withWildcard --recursive my-bucket \\\n'images\/*.png'\nimages\/amsterdam.png\nimages\/sacramento.png<\/pre>\n\n\n\n<div class=\"abstract\" style=\"line-height: 1.8; margin: 24px 12px; padding: 24px 12px 10px 12px;\"><strong>DANGER ZONE:<\/strong> by omitting <code>--withWildcard<\/code> and the <code>folderName<\/code> argument, you can delete all of the files in a bucket. We <em>strongly<\/em> recommend you use <code>--dryRun<\/code> first, to check that you will be deleting the correct files.<\/div>\n\n\n\n<pre>% b2 rm --dryRun --versions \u2013recursive my-bucket\nindex.html\nimages\/amsterdam.png\nimages\/phoenix.jpeg\nimages\/sacramento.png\nstylesheets\/style.css<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">New <code>--withWildcard<\/code> option for the <code>ls<\/code> command<\/h3>\n\n\n\n<p>The <code>ls<\/code> command gains the <code>--withWildcard<\/code> option. It operates identically as described above. In fact, <code>b2 rm --dryRun --withWildcard --recursive<\/code> executes the exact same code as <code>b2 ls --withWildcard --recursive<\/code>. For example:<\/p>\n\n\n\n<pre>% b2 ls --withWildcard --recursive my-bucket 'images\/*.png'\nimages\/amsterdam.png\nimages\/sacramento.png\n<\/pre>\n\n\n\n<p>You can combine <code>--withWildcard<\/code> with any of the existing options for <code>ls<\/code>, for example <code>--long<\/code>:<\/p>\n\n\n\n<pre>% b2 ls --long --withWildcard --recursive my-bucket 'images\/*.png'\n4_z71d55dummyid381234ed0c1b_f108f1dummyid163b_d2dummyid_m165048_c004\n_v0402014_t0016_u01dummyid48198  upload  2023-02-09  16:50:48     714686  \nimages\/amsterdam.png\n4_z71d55dummyid381234ed0c1b_f1149bdummyid1141_d2dummyid_m165048_c004\n_v0402010_t0048_u01dummyid48908  upload  2023-02-09  16:50:48     549261  \nimages\/sacramento.png<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">New <code>--incrementalMode<\/code> option for <code>upload-file<\/code> and <code>sync<\/code><\/h3>\n\n\n\n<p>The new <code>--incrementalMode<\/code> option saves time and bandwidth when working with files that grow over time, such as log files, by only uploading the changes since the last upload. When you use the <code>--incrementalMode<\/code> option with <code>upload-file<\/code> or <code>sync<\/code>, the B2 CLI looks for an existing file in the bucket with the <code>b2FileName<\/code> that you supplied, and notes both its length and <a href=\"https:\/\/en.wikipedia.org\/wiki\/SHA-1\" target=\"_blank\" rel=\"noopener\">SHA-1 digest<\/a>. Let\u2019s call that length <em>l<\/em>. The CLI then calculates the SHA-1 digest of the first <em>l<\/em> bytes of the local file. If the digests match, then the CLI can instruct Backblaze B2 to create a new file comprising the existing file and the remaining bytes of the local file.<\/p>\n\n\n\n<p>That was a bit complicated, so let\u2019s look at a concrete example. My web server appends log data to a file, <code>access.log<\/code>. I\u2019ll see how big it is, get its SHA-1 digest, and upload it to a B2 Bucket:<\/p>\n\n\n\n<pre>% ls -l access.log\n-rw-r--r--  1 ppatterson  staff  5525849 Feb  9 15:55 access.log\n\n% sha1sum access.log\nff46904e56c7f9083a4074ea3d92f9be2186bc2b  access.log <\/pre>\n\n\n\n<p>The <code>upload-file<\/code> command outputs all of the file\u2019s metadata, but we\u2019ll focus on the SHA-1 digest, file info, and size.<\/p>\n\n\n\n<pre>% b2 upload-file my-bucket access.log access.log\n...\n{\n...\n    \"contentSha1\": \"ff46904e56c7f9083a4074ea3d92f9be2186bc2b\",\n...\n    \"fileInfo\": {\n        \"src_last_modified_millis\": \"1675986940381\"\n    },\n...\n    \"size\": 5525849,\n...\n}<\/pre>\n\n\n\n<p>As you might expect, the digest and size match those of the local file.<\/p>\n\n\n\n<p>Time passes, and our log file grows. I\u2019ll first upload it as a different file, so that we can see the default behavior when the B2 Cloud Storage file is simply replaced:<\/p>\n\n\n\n<pre>% ls -l access.log\n-rw-r--r--  1 ppatterson  staff  11047145 Feb  9 15:57 access.log\n\n% sha1sum access.log\n7c97866ff59330b67aa96d7a481578d62e030788 access.log\n\n% b2 upload-file my-bucket access.log new-access.log\n{\n...\n    \"contentSha1\": \"7c97866ff59330b67aa96d7a481578d62e030788\",\n...\n    \"fileInfo\": {\n        \"src_last_modified_millis\": \"1675987069538\"\n    },\n...\n    \"size\": 11047145,\n...\n}<\/pre>\n\n\n\n<p>Everything is as we might expect\u2014the CLI uploaded 11,047,145 bytes to create a new file, which is 5,521,296 bytes bigger than the initial upload.<\/p>\n\n\n\n<p>Now I\u2019ll use the <code>--incrementalMode<\/code> option to replace the first Backblaze B2 file:<\/p>\n\n\n\n<pre>% b2 upload-file --quiet my-bucket access.log access.log\n...\n{\n...\n    \"contentSha1\": \"none\",\n...\n    \"fileInfo\": {\n        \"large_file_sha1\": \"7c97866ff59330b67aa96d7a481578d62e030788\",\n        \"plan_id\": \"ea6b099b48e7eb7fce01aba18dbfdd72b56eb0c2\",\n        \"src_last_modified_millis\": \"1675987069538\"\n    },\n...\n    \"size\": 11047145,\n...\n}<\/pre>\n\n\n\n<p>The digest is exactly the same, but it has moved from <code>contentSha1<\/code> to <code>fileInfo.large_file_sha1<\/code>, indicating that the file was uploaded as separate parts, resulting in a <a href=\"https:\/\/www.backblaze.com\/b2\/docs\/large_files.html\" target=\"_blank\" rel=\"noopener\">large file<\/a>. The CLI didn\u2019t need to upload the initial 5,525,849 bytes of the local file; it instead instructed Backblaze B2 to combine the existing file with the final 5,521,296 bytes of the local file to create a new version of the file.<\/p>\n\n\n\n<p>There are several more new features and fixes to existing functionality in version 3.7.0\u2014make sure to check out the <a href=\"https:\/\/github.com\/Backblaze\/B2_Command_Line_Tool\/blob\/master\/CHANGELOG.md\" target=\"_blank\" rel=\"noopener\">B2 CLI changelog<\/a> for a complete list.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Major Changes in B2 Python SDK 1.19.0<\/h3>\n\n\n\n<p>Most of the changes in the B2 Python SDK support the new features in the B2 CLI, such as adding wildcard matching to the Bucket.ls operation and adding support for incremental upload and sync. Again, you can inspect the <a href=\"https:\/\/github.com\/Backblaze\/B2_Command_Line_Tool\/blob\/master\/CHANGELOG.md\" target=\"_blank\" rel=\"noopener\">B2 Python SDK changelog<\/a> for a comprehensive list.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Get to Grips with B2 Command Line Tool Version <del>3.7.0<\/del> 3.7.1<\/h2>\n\n\n\n<p>Whether you\u2019re working on Windows, Mac or Linux, it\u2019s straightforward to install or update the B2 CLI; <a href=\"https:\/\/www.backblaze.com\/b2\/docs\/quick_command_line.html\" target=\"_blank\" rel=\"noopener\">full instructions are provided in the Backblaze B2 documentation<\/a>.<\/p>\n\n\n\n<p>Note that the latest version is now 3.7.1. The only changes from 3.7.0 are a handful of corrections to help text and that the Mac binary is no longer provided, due to shortcomings in the Mac version of PyInstaller. Instead, we provide the Mac version of the CLI via the <a href=\"https:\/\/brew.sh\/\" target=\"_blank\" rel=\"noopener\">Homebrew package manager<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Check out our rundown of the latest version of the Backblaze B2 Command Line tool to see how we&#8217;ve made it even easier to manage files (especially in large datasets). <\/p>\n","protected":false},"author":174,"featured_media":108097,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[7,434,483],"tags":[468],"class_list":["post-108095","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-storage","category-featured-1","category-tech-lab","tag-b2cloud","entry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Go Wild with Wildcards in the Backblaze B2 Command Line Tool 3.7.1<\/title>\n<meta name=\"description\" content=\"Check out our rundown of the latest version of the Backblaze B2 Command Line tool to see how we&#039;ve made it even easier to manage files (especially in large datasets).\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.backblaze.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Go Wild with Wildcards in the Backblaze B2 Command Line Tool 3.7.1\" \/>\n<meta property=\"og:description\" content=\"Check out our rundown of the latest version of the Backblaze B2 Command Line tool to see how we&#039;ve made it even easier to manage files (especially in large datasets).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Backblaze Blog | Cloud Storage &amp; Cloud Backup\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/backblaze\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-22T17:41:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-11T16:56:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1440\" \/>\n\t<meta property=\"og:image:height\" content=\"820\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Pat Patterson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@backblaze\" \/>\n<meta name=\"twitter:site\" content=\"@backblaze\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pat Patterson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Go Wild with Wildcards in the Backblaze B2 Command Line Tool 3.7.1","description":"Check out our rundown of the latest version of the Backblaze B2 Command Line tool to see how we've made it even easier to manage files (especially in large datasets).","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.backblaze.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/","og_locale":"en_US","og_type":"article","og_title":"Go Wild with Wildcards in the Backblaze B2 Command Line Tool 3.7.1","og_description":"Check out our rundown of the latest version of the Backblaze B2 Command Line tool to see how we've made it even easier to manage files (especially in large datasets).","og_url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/","og_site_name":"Backblaze Blog | Cloud Storage &amp; Cloud Backup","article_publisher":"https:\/\/www.facebook.com\/backblaze","article_published_time":"2023-02-22T17:41:54+00:00","article_modified_time":"2023-07-11T16:56:55+00:00","og_image":[{"width":1440,"height":820,"url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204.png","type":"image\/png"}],"author":"Pat Patterson","twitter_card":"summary_large_image","twitter_creator":"@backblaze","twitter_site":"@backblaze","twitter_misc":{"Written by":"Pat Patterson","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/#article","isPartOf":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/"},"author":{"name":"Pat Patterson","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/a724a8aee97b6451107442747cd101a4"},"headline":"Go Wild with Wildcards in the Backblaze B2 Command Line Tool 3.7.1","datePublished":"2023-02-22T17:41:54+00:00","dateModified":"2023-07-11T16:56:55+00:00","mainEntityOfPage":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/"},"wordCount":1300,"commentCount":1,"publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"image":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204.png","keywords":["B2Cloud"],"articleSection":["Cloud Storage","Featured","Tech Lab"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/","name":"Go Wild with Wildcards in the Backblaze B2 Command Line Tool 3.7.1","isPartOf":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/#primaryimage"},"image":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204.png","datePublished":"2023-02-22T17:41:54+00:00","dateModified":"2023-07-11T16:56:55+00:00","description":"Check out our rundown of the latest version of the Backblaze B2 Command Line tool to see how we've made it even easier to manage files (especially in large datasets).","breadcrumb":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/#primaryimage","url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204.png","contentUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204.png","width":1440,"height":820},{"@type":"BreadcrumbList","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/go-wild-with-wildcards-in-backblaze-b2-command-line-tool-3-7-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Go Wild with Wildcards in the Backblaze B2 Command Line Tool 3.7.1"}]},{"@type":"WebSite","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","name":"Backblaze Cloud Solutions Blog","description":"Cloud Storage &amp; Cloud Backup","publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization","name":"Backblaze","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","width":512,"height":512,"caption":"Backblaze"},"image":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/backblaze","https:\/\/x.com\/backblaze","https:\/\/www.youtube.com\/user\/Backblaze","https:\/\/en.wikipedia.org\/wiki\/Backblaze"]},{"@type":"Person","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/a724a8aee97b6451107442747cd101a4","name":"Pat Patterson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2022\/01\/PatPatterson1920px-150x150.png","url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2022\/01\/PatPatterson1920px-150x150.png","contentUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2022\/01\/PatPatterson1920px-150x150.png","caption":"Pat Patterson"},"description":"Pat Patterson is the former chief technical evangelist at Backblaze. Over his three decades in the industry, Pat has built software and communities at Sun Microsystems, Salesforce, StreamSets, and Citrix. In his role at Backblaze, he creates and delivers content tailored to the needs of the hands-on technical professional, acts as the \u201cvoice of the developer\u201d on the Product team, and actively participates in the wider technical community. Outside the office, Pat runs far, having completed ultramarathons up to the 50 mile distance. Catch up with Pat via Bluesky or LinkedIn.","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/author\/pat\/"}]}},"jetpack_featured_media_url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2023\/02\/bb-bh-New-CLI-and-Python-SDK-release-e1677013094204.png","_links":{"self":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/108095","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/users\/174"}],"replies":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/comments?post=108095"}],"version-history":[{"count":0,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/108095\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media\/108097"}],"wp:attachment":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media?parent=108095"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/categories?post=108095"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/tags?post=108095"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}