#!/bin/bash function _help() { echo ' Usage: file-enumerate [-k] [-p #] [-o folder] Creates a folder "enumerated" and hard links all files in the current folder renamed with a number (d.ext). -k Keep filename as is (d.filename) -p Pad numbers, defaults to 4 -o Output folder name, default: enumerated -c Copy instead of hard link -i Offset. start from number (default 1) -s Shuffle order ' exit } keep=false pad=4 output=enumerated hardlink="-l" offset=1 shuf=false for (( i=1; i<=$#; i++ )); do j=$(( i + 1 )) [[ "${!i}" = "-h" ]] && _help [[ "${!i}" = "--help" ]] && _help [[ "${!i}" = "-c" ]] && hardlink="" [[ "${!i}" = "-k" ]] && keep=true [[ "${!i}" = "-p" ]] && { pad=${!j}; i=$(( i + 1 )); } [[ "${!i}" = "-o" ]] && { output=${!j}; i=$(( i + 1 )); } [[ "${!i}" = "-i" ]] && { offset=${!j}; i=$(( i + 1 )); } [[ "${!i}" = "-s" ]] && { shuf=true; } done printf -v padstr "%%0%dd" $pad _enum() { if [[ $shuf = true ]]; then sorting="shuf" else sorting="sort -V" fi ls -1p | grep -v "/$" | $sorting | cat -n | while read n f; do n=$(( n + $offset - 1 )) printf -v padded $padstr $n if [[ $keep = true ]]; then printf -v outname "%s.%s" "$padded" "$f" else ext=${f##*.} if [[ "$ext" = "$f" ]]; then printf -v outname "%s" "$padded" else printf -v outname "%s.%s" "$padded" "$ext" fi fi printf "%30s -> %s\n" "$f" "$outname" cp $hardlink "${f}" "${output}"/"$outname" done } mkdir -p "${output}" _enum