From c371488a184ce659bf28171a3fdde37f3ec390bf Mon Sep 17 00:00:00 2001 From: Bill Date: Sat, 19 Mar 2022 11:14:03 -0400 Subject: Create automv script Automv script will allow a cronjob to easily move files from one dir to another based on a find regex query. You can dynamically set what files to look for and where using .conf files in the automv.d folder present next to the script - or by setting its location in AUTOMV_DIR. Dev note: I specifically avoided using $HOME/.local/automv.d/ because my specific use case the user whose cron this will be in doesn't have a home directory. An improvement could be expanding the smart defaults to doing something like: if [[ -n "$HOME" ]]; then if [[ -d $HOME/.local/automv.d ]]; then # use that else # etc else # etc But I don't like long bash if/else nesting so I figured just set a local default otherwise override in the env --- automv.sh | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100755 automv.sh (limited to 'automv.sh') diff --git a/automv.sh b/automv.sh new file mode 100755 index 0000000..16d7683 --- /dev/null +++ b/automv.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -e + +if [[ -n "$AUTOMV_DIR" ]]; then + automvdir=$AUTOMV_DIR +else + automvdir=$(dirname "$0")/automv.d +fi + +function extract { + local file=$1 + local prop=$2 + grep "^${prop}=.*$" $file | cut -d '=' -f2 +} + +function automv { + local query=$1 + local source=$2 + local target=$3 + echo "Moving files in $source that match '$query' to $target" + find $source -type f \( -regex "${query}" ! -iname ".*" \) | xargs -I '{}' mv {} $target/ +} + +echo "Executing automv functions from $automvdir" +for file in $automvdir/*.conf +do + echo "found $file" + if [[ -f $file ]]; then + # Extract file configs + query=$(extract $file "query") + sourced=$(extract $file "source") + target=$(extract $file "target") + + automv $query $sourced $target + fi +done -- cgit v1.2.3-54-g00ecf