diff --git a/bin/rm-safe b/bin/rm-safe new file mode 120000 index 0000000..7cc7ce9 --- /dev/null +++ b/bin/rm-safe @@ -0,0 +1 @@ +../files/rm-safe \ No newline at end of file diff --git a/files/file_version.py b/files/file_version.py index 3f2f8f2..9fe0fe5 100755 --- a/files/file_version.py +++ b/files/file_version.py @@ -1,6 +1,6 @@ #!/usr/bin/env python import os, argparse, sys -from shutil import copyfile +from shutil import copyfile, copytree from datetime import datetime def get_options(): @@ -12,13 +12,13 @@ def get_options(): action = "store_false", dest = "move", default = True, - help = "Copy file instead of moving", + help = "Copy path instead of moving", ) parser.add_argument( '-d', action = "store_true", dest = "date", - help = "Use file's date+time as version number", + help = "Use paths date+time as version number", default = False ) parser.add_argument( @@ -105,8 +105,6 @@ def test_existing(name, overwrite): if __name__ == "__main__": opts = get_options() - if os.path.isdir(opts.file): - raise ValueError("Can not handle directories") if opts.date: new_name = get_date_name(opts.file) else: @@ -117,4 +115,7 @@ if __name__ == "__main__": if opts.move: os.rename(opts.file, new_name) else: - copyfile(opts.file, new_name) + if os.path.isdir(opts.file): + copytree(opts.file, new_name) + else: + copyfile(opts.file, new_name) diff --git a/files/rm-safe b/files/rm-safe new file mode 100755 index 0000000..6d9a753 --- /dev/null +++ b/files/rm-safe @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e +function helpexit() { + echo Delete files by moving to a safe location in your ~/.cache/rm-safe + echo This command is always recursive! + echo '-v verbose, --clear delete cache permanently' + exit +} +function clearsafe() { + test -d "$SAFELOC" && rm-progress -f "$SAFELOC" + exit +} +SAFELOC=~/.cache/rm-safe +FOLDERS=() +[[ -z "$1" ]] && helpexit +for ((i=1; i<=${#@}; i++)) { + [[ "${!i}" = "-h" ]] && helpexit + [[ "${!i}" = "--help" ]] && helpexit + [[ "${!i}" = "-v" ]] && { VERBOSE=1; continue; } + [[ "${!i}" = "--clear" ]] && { clearsafe; continue; } + [[ "${!i}" = "-"* ]] && helpexit + FOLDERS+=( "${!i}" ) +} +mkdir -p "$SAFELOC" +now=$( date -Idate ) +for d in "${FOLDERS[@]}"; do + if [[ ! -e "$d" ]]; then continue; fi + path=$( readlink -f "$d" ) + dir=$( dirname "$path" ) + if [[ "$VERBOSE" -eq 1 ]]; then echo "$path"; fi + if [[ -e "$SAFELOC/$now/$path" ]]; then file-version -q "$SAFELOC/$now/$path"; fi + mkdir -p "$SAFELOC/$now/$dir" + mv "$d" "$SAFELOC/$now/$dir" +done +