#!/bin/sh # # datedirs - move dated files into a date-based directory hierarchy # # SPDX-FileCopyrightText: 2023 Daniel Kalak # SPDX-License-Identifier: GPL-3.0-or-later # # This program moves files with a YYYY-mm-dd[._] date prefix to # directories in a format sepcified on the command line. Files are only # moved, not renamed. The program exits 1 on bad usage and 0 otherwise. usage_quit() { cat <<- EOF >&2 Usage: $(basename "$0") FORMAT Possible values for FORMAT: y y/m y-m y/m/d y/m-d y-m/d y-m-d m m/d m-d d EOF exit 1 } [ "$#" = 1 ] || usage_quit case "$1" in y ) chars=1-4 ; flag=g ;; y/m ) chars=1-7 ; flag=g ;; y-m ) chars=1-7 ; flag=3 ;; y/m/d) chars=1-10; flag=g ;; y/m-d) chars=1-10; flag=1 ;; y-m/d) chars=1-10; flag=2 ;; y-m-d) chars=1-10; flag=3 ;; m ) chars=6-7 ; flag=g ;; m/d) chars=6-10; flag=g ;; m-d) chars=6-10; flag=3 ;; d) chars=9-10; flag=g ;; *) usage_quit ;; esac for f in [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][._]* do dir="$(printf %s "$f" | cut -c "$chars" | sed 's/-/\//'"$flag")" mkdir -pv "$dir" mv -iv "$f" "$dir" done