diff --git a/files/FolderFlat b/files/FolderFlat index 1b0b924..61a89e3 100755 --- a/files/FolderFlat +++ b/files/FolderFlat @@ -5,6 +5,7 @@ function help() { echo "Empty folders are removed" echo " -f to force action " echo " -n to move files as is, i.e. not include path names in new name " + echo " -H include hidden files/folders " echo " -p C Replace path separator / with character C " } @@ -13,33 +14,45 @@ function helpexit() { exit } +function finder() { + if [[ "$FILTER" -eq 0 ]]; then + find . -mindepth 2 -type f -path '*.*' -printf %P'\n' + return $? + fi + if [[ "$FILTER" -eq 1 ]]; then + find . -mindepth 2 -not -path '*/\.*' -type f -printf %P'\n' + return $? + fi +} + function preview() { echo "" - for f in $( find . -mindepth 2 -type f -path '*.*' -printf %P'\n' | head ); do + for f in $( finder | head ); do [[ "$NO_PATH" = "1" ]] && { echo "$f => " . } || { echo "$f =>" "${f//\//$SEP}" - } - done + } + done echo "..." } function flat() { [[ "$FORCE" = "0" ]] && INTERACT="-i" - for f in $( find . -mindepth 2 -type f -path '*.*' -printf %P'\n' ); do + for f in $( finder ); do [[ "$NO_PATH" = "1" ]] && { mv -v $INTERACT "$f" . } || { mv -v $INTERACT "$f" "${f//\//$SEP}" - } + } done find . -depth -type d -empty -delete } SEP="_" FORCE=0 -while getopts fhnp: opt +FILTER=1 +while getopts fhHnp: opt do case "$opt" in f) FORCE=1 @@ -47,6 +60,9 @@ do case "$opt" in h) helpexit ;; + H) + FILTER=0 + ;; n) NO_PATH=1 ;; @@ -60,6 +76,6 @@ IFS=$'\n' help preview echo "Are you sure? Break with ctrl-c" - read i + read i } flat