diff options
author | xyz <gky44px1999@gmail.com> | 2021-07-27 09:38:46 -0700 |
---|---|---|
committer | xyz <gky44px1999@gmail.com> | 2021-07-27 09:38:46 -0700 |
commit | 06588bb7f19772edffae4b8729fda857b13bddf0 (patch) | |
tree | 90ed98c51775afc289e8fdcd502cf30747b72bd1 /.local/bin | |
parent | fb8e89b0182309308deb97aecdef61be98ce552a (diff) |
add organize extension files script
Diffstat (limited to '.local/bin')
-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 |