       (cb (str "Could not resolve content-type for '" key "'.") nil))
     ch))
 
+(defn delete-s3-objects [s3 keys]
+  (let [params (clj->js {:Delete
+                         {:Objects (->> keys
+                                        (map (fn [key] {:Key key}))
+                                        (vec))}})
+        ch (chan)
+        cb (fn [err data] (put! ch [err data]))]
+    (.deleteObjects s3 params cb)
+    ch))
+
 (defn read-local-file [path]
   (let [ch (chan)
         cb (fn [err data] (put! ch [err data]))]

                          (concat
                            (map #(make-copy-file-action s3 % whatif verbose) onlylocal)
                            (->> onlyremote
                                 (map (fn [key _] key))
                                 (partition-all 1000)
                                 (map #(make-delete-file-action s3 % delete whatif verbose)))
                            (map #(make-update-file-action s3 % force whatif verbose) both))

                  :default {:bucket "kingjames-beta"
                            :region "us-east-1"
                            :profile "default"}}}
  [{dir :_ force :force whatif :whatif delete :delete bucket :bucket region :region profile :profile verbose :verbose}]
  (go
    (if (not= (count dir) 1)
      ["<dir> parameter required." nil]
