zshrc: updating bk()
[grml-etc-core.git] / etc / zsh / zshrc
index d3d73b1..a97441c 100644 (file)
@@ -3019,10 +3019,24 @@ fi
 
 # useful functions
 
-#f5# Backup \kbd{file {\rm to} file\_timestamp}
+#f5# Backup \kbd{file_or_folder {\rm to} file_or_folder\_timestamp}
 bk() {
     emulate -L zsh
-    cp -b $1 $1_`date --iso-8601=m`
+    local current_date=$(date -u "+%Y-%m-%dT%H:%M:%SZ")
+    while (( $# > 0 )); do
+        if islinux; then
+            cp -a "$1" "$1_$current_date"
+        elif isfreebsd; then
+            if [[ -d "$1" ]] && [[ "$1" == */ ]]; then
+                echo "cowardly refusing to copy $1 's content; see cp(1)" >&2; return 1
+            else
+                cp -a "$1" "$1_$current_date"
+            fi
+        else;
+            cp -pR "$1" "$1_$current_date"
+        fi
+        shift
+    done
 }
 
 #f5# cd to directoy and list files