diff options
Diffstat (limited to '.local')
-rwxr-xr-x | .local/bin/orgext | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/.local/bin/orgext b/.local/bin/orgext new file mode 100755 index 00000000..a3863cf8 --- /dev/null +++ b/.local/bin/orgext @@ -0,0 +1,30 @@ +#!/bin/sh +# can improve by passing $@ to functions but seems need bashism +# references: +# https://stackoverflow.com/questions/1842254/how-can-i-find-all-of-the-distinct-file-extensions-in-a-folder-hierarchy + +getext () +{ + find . -maxdepth 1 -type f | awk -F. '!a[$NF]++{print $NF}' +} + +outdir () +{ + find . -type f -execdir mv -t "$(realpath .)" '{}' \+ + find . -mindepth 1 -maxdepth 1 -type d -execdir rm -r '{}' \+ +} + +# may further optimize by output file extension names to a variable and use it for both mkdir and mv, current is fast enough for me +indir () +{ + getext | xargs mkdir + # don't know why -print0/-0 for find and xargs doesn't work here + find . -mindepth 1 -maxdepth 1 -type d -execdir basename '{}' \; | xargs -I _ find . -maxdepth 1 -type f -name '*._' -execdir mv -t '_' '{}' \+ +} + +case "$1" in + '-e') getext;; + '-o') outdir;; + '-i') indir;; + *) outdir; indir;; +esac |