diff --git a/bin/noblogs.in b/bin/noblogs.in
index 418021f43cd83ad4db10cc5365dc2aa2236805b4..e912cae6413f832a24ad137e1f08f852efca7c2a 100755
--- a/bin/noblogs.in
+++ b/bin/noblogs.in
@@ -194,20 +194,26 @@ function do_dump_shards($args) {
   echo "\n";
 }
 
+function print_blogs($blogs, $print_url) {
+    foreach ($blogs as $blog) {
+        if ($print_url) {
+            echo("{$blog->domain}\n");
+        } else {
+            echo("{$blog->blog_id}\n");
+        }
+    }
+}
+
 // 'print-all-blogs': List all blog IDs.
 function do_print_all_blogs($args) {
-  $blogs = noblogs_get_blogs();
-  foreach ($blogs as $blog) {
-    echo "{$blog->blog_id}\n";
-  }
+    print_blogs(noblogs_get_blogs(),
+                (count($args) > 0 && $args[0] == "--urls"));
 }
 
 // 'print-local-blogs': List the blog IDs that are local to this machine.
 function do_print_local_blogs($args) {
-  $local_blogs = noblogs_get_local_blogs();
-  foreach ($local_blogs as $b) {
-    echo $b . "\n";
-  }
+    print_blogs(noblogs_get_local_blog_objects(),
+                (count($args) > 0 && $args[0] == "--urls"));
 }
 
 // 'remove-network-upgrade-message': Remove the annoying "network
diff --git a/lib/blogs.php b/lib/blogs.php
index 3055e2236b5b5dfafcdd6ca4b7f322ffa020f7b2..402fb210c12f65ecf19aa61a39d060071741b12b 100644
--- a/lib/blogs.php
+++ b/lib/blogs.php
@@ -1,15 +1,30 @@
 <?php
 
 
-// Return a list of all blog IDs.
+// Return a list of all blogs (only blog_id and domain attrs).
 // (Does not include deleted and archived blogs).
 function noblogs_get_blogs() {
   global $wpdb;
-  $sql = "SELECT blog_id FROM $wpdb->blogs WHERE deleted = 0 AND archived = '0'";
+  $sql = "SELECT blog_id, domain FROM $wpdb->blogs WHERE deleted = 0 AND archived = 0";
   $result = $wpdb->get_results($sql);
   return ($result);
 }
 
+// Return a list of local blog objects (only blog_id and domain attrs).
+function noblogs_get_local_blog_objects() {
+    global $wpdb;
+    $blog_ids = noblogs_get_local_blogs();
+    $n = count($blog_ids);
+    $blogs = array();
+    for ($i = 0; $i < $n; $i += 100) {
+        $ids = array_slice($blog_ids, $i, 100);
+        $sql = "SELECT blog_id, domain FROM $wpdb->blogs WHERE deleted = 0 AND archived = 0 AND blog_id IN (" . implode(",", $ids) . ")";
+        $result = $wpdb->get_results($sql);
+        array_push($blogs, ...$result);
+    }
+    return $blogs;
+}
+
 // Find a blog by its name or ID.
 function noblogs_get_blog($blogname) {
   global $wpdb;