blob: 2ece9e727fc35f70a268380fa83dfb7c08ca9731 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#!/bin/sh
# can improve by passing $@ to functions, but seems need bashism, or abandon functions
# maybe seperate find extension part and output names as another script with options of recursive or not
# maybe add option for using ln instead of mv
# references:
# https://stackoverflow.com/questions/1842254/how-can-i-find-all-of-the-distinct-file-extensions-in-a-folder-hierarchy
# not sure if find here need -depth, not sure if mv here need -n and -T
outdir ()
{
find . -type f -execdir mv -nt "$PWD" -- '{}' \+
find . -mindepth 1 -maxdepth 1 -type d -delete
}
# 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
# maybe better if make all uppercase to lowercase, is it possible to use awk for that?
indir ()
{
find . -maxdepth 1 -type f | awk -F. '!a[$NF]++{print $NF}' | xargs mkdir --
find . -mindepth 1 -maxdepth 1 -type d -execdir basename -az -- '{}' \+ | xargs -0 -I _ find . -maxdepth 1 -type f -name '*._' -execdir mv -t '_' -- '{}' \+
}
case "$1" in
'-o') outdir;;
'-i') indir;;
*) outdir; indir;;
esac
|