new fortune.
[feisty_meow.git] / scripts / files / zip_directories.sh
index 1b5e5d014a592dc4b6519fdafc6fda67a5c0fad4..5a603b4dd6dcdc147975e2e518f3df3e93c7e037 100644 (file)
@@ -5,7 +5,39 @@
 
 source $FEISTY_MEOW_SCRIPTS/core/functions.sh
 
-#hmmm: take a dir to go to for this.
-dir=.
+dirs=()
+
+# snag the command line arguments into an array of names.
+for i in "$@"; do dirs+=("$i"); done
+
+# if there were no arguments, use the current directories list of directories.
+if [ ${#dirs[@]} -eq 0 ]; then
+  # using a temp file is clumsy but after a lot of different methods being tried, this one
+  # worked and wasn't super ugly.
+  tempfile="$(mktemp /tmp/dirlist.XXXXXX)"
+  find $dir -mindepth 1 -maxdepth 1 -type d -exec echo "dirs+=(\"{}\");" ';' >$tempfile
+  source "$tempfile"
+#echo dirs default to: ${dirs[@]}
+  \rm -f $tempfile
+fi
+
+# takes a directory name as an argument and sucks the directory
+# into a timestamped zip file.
+function flattenizer()
+{
+  for dirname in "$@"; do
+    while [[ $dirname =~ .*/$ ]]; do
+      dirname="${dirname:0:((${#dirname}-1))}"
+    done
+    if [ ! -z "$dirname" -a -d "$dirname" ]; then
+      echo "flattening '$dirname'..."
+      zip -rm "${dirname}_$(date_stringer).zip" "$dirname" &>/dev/null
+    fi
+  done
+}
+
+for ((i=0; i < ${#dirs[@]}; i++)); do
+  dir="${dirs[i]}"
+  flattenizer "$dir"
+done
 
-for i in $(find $dir -mindepth 1 -maxdepth 1 -type d) ; do zip -rm "${i}_$(date_stringer)" "$i"; done