git commit test
[cmdllinux.git] / searchfs / _find_group_defs.sh
blobf1f176beb118e141ad18086048cd1ef0c43577a4
2 #keep your files organized (in place)
3 #put them into directories - name directories (subcategories)
4 #(some additional files will be created :( )
6 #-put common category files into ??comm directory (where ? is a
7 #numeric character) and create something.commident files to identify
8 #category. (touch something.commident)
10 #-put alternate group names (only the ident-file) to .tags directory
11 #by creating something.tagident files. (touch something.tagident)
13 #init:
14 #sh _init_searchfs.sh
15 #clear:
16 #sh _clear_searchfs.sh
18 #find: (shell filename expansion "*cmd" "?*")
19 #sh _find_group_defs.sh -a cmd script prog
20 #sh _find_group_defs.sh -a cmd script -prog
21 #sh _find_group_defs.sh -o cmd script prog
22 #sh _find_group_defs.sh -a bash example | xargs -r grep sed
24 #-o or (group .. group)
25 #-a and (group where "true" some other group)
26 #default is -o
28 #invert search group names like -compress (only in "and" mode (-a))
29 #other option: "*" (list groups)
30 #without parameter: list all
32 lsall()
34 find -type f -name "list.identident" | \
35 sed 's%list.identident$%%' | sort | sed 's%/$%%' | \
36 while read listdir; do
37 if [[ -z "$olistdir" ]]; then
38 olistdir="$listdir"
39 find $listdir -type f \( ! -name "*.*ident" \)
40 else
41 if [[ ! "$listdir" =~ ^$olistdir/.* ]]; then
42 olistdir="$listdir"
43 find $listdir -type f \( ! -name "*.*ident" \)
46 done
49 lsgroups()
51 find -type f -name "*.groupident" | \
52 sed -e 's%/[^/]\+$%%' -e 's%.*%&/%' | sort -u | sed 's%/$%%' | \
53 while read listdir0; do
54 case "$listdir0" in
55 */.tags)
56 echo -n "$listdir0"
57 find $listdir0 -type f -name "*.tagident" | sed 's%\.tagident$%%' | \
58 while read listdir3; do
59 echo -n "/$(basename "$listdir3")"
60 done
61 echo
63 */[0-9][0-9]comm)
64 echo -n "$listdir0"
65 find $listdir0 -type f -name "*.commident" | sed 's%\.commident$%%' | \
66 while read listdir3; do
67 echo -n "/$(basename "$listdir3")"
68 done
69 echo
72 echo "$listdir0"
74 esac
75 done | \
76 sed -e 's%^\./%@%' -e 's%/%@%g' -e 's%.*%&@%'
79 lsor()
81 local params="$@"
82 echo "$params" | \
83 while read i; do
84 find -type f -name "*@$i@*.groupident"
85 done | \
86 sed -e 's%/[^/]\+$%%' -e 's%/\.tags$%%' -e 's%.*%&/%' | \
87 sort -u | sed 's%/$%%' | \
88 while read listdir2; do
89 if [[ -z "$olistdir2" ]]; then
90 olistdir2="$listdir2"
91 find $listdir2 -type f -name "list.identident"
92 else
93 if [[ ! "$listdir2" =~ ^$olistdir2/.* ]]; then
94 olistdir2="$listdir2"
95 find $listdir2 -type f -name "list.identident"
98 done | sed 's%/list.identident$%%' | \
99 sed 's%.*%&/%' | sort | sed 's%/$%%' | \
100 while read listdir; do
101 if [[ -z "$olistdir" ]]; then
102 olistdir="$listdir"
103 find $listdir -type f \( ! -name "*.*ident" \)
104 else
105 if [[ ! "$listdir" =~ ^$olistdir/.* ]]; then
106 olistdir="$listdir"
107 find $listdir -type f \( ! -name "*.*ident" \)
110 done
113 lsand()
115 ##for "for" loop
116 set -f
118 local params="$@"
119 echo "$params" | \
120 while read i; do
121 if [[ "${i::1}" != "-" ]]; then
122 find -type f -name "*@$i@*.groupident"
124 done | sed -e 's%/[^/]\+$%%' -e 's%.*%&/%' | sort -u | sed 's%/$%%' | \
125 while read listdir0; do
126 case "$listdir0" in
127 */.tags)
128 echo -n "$listdir0"
129 find $listdir0 -type f -name "*.tagident" | sed 's%\.tagident$%%' | \
130 while read listdir3; do
131 echo -n "/$(basename "$listdir3")"
132 done
133 echo
135 */[0-9][0-9]comm)
136 echo -n "$listdir0"
137 find $listdir0 -type f -name "*.commident" | sed 's%\.commident$%%' | \
138 while read listdir3; do
139 echo -n "/$(basename "$listdir3")"
140 done
141 echo
144 find $listdir0 -type f -name "*.groupident" | sed 's%/[^/]\+$%%'
146 esac
147 done | sed -e 's%^\./%@%' -e 's%/%@%g' -e 's%.*%&@%' | \
148 while read listdir1; do
149 A=true
150 for j in $params; do
151 if [[ "${j::1}" == "-" ]]; then
152 j="${j:1}"
153 j=${j//\*/[^@]*}
154 if [[ "$listdir1" != "${listdir1/@$j@/}" ]]; then
155 A=false
156 break
159 done
160 [[ "$A" == "false" ]] && continue
161 for j in $params; do
162 [[ "${j::1}" == "-" ]] && continue
163 j=${j//\*/[^@]*}
164 if [[ "$listdir1" == "${listdir1/@$j@/}" ]]; then
165 A=false
166 break
168 done
169 [[ "$A" == "true" ]] && echo "$listdir1"
170 done | sed -e 's%^@%./%' -e 's%@$%%' -e 's%@%/%g' | \
171 sed -e 's%\(.*/[0-9][0-9]comm\)/.\+$%\1%' -e 's%\(.*\)/\.tags/.\+$%\1%' | \
172 sed 's%.*%&/%' | sort -u | sed 's%/$%%' | \
173 while read listdir2; do
174 if [[ "$findsub" == "true" ]]; then
175 [[ -e "$listdir2/list.identident" ]] && echo "$listdir2/list.identident"
176 else
177 if [[ -z "$olistdir2" ]]; then
178 olistdir2="$listdir2"
179 find $listdir2 -type f -name "list.identident"
180 else
181 if [[ ! "$listdir2" =~ ^$olistdir2/.* ]]; then
182 olistdir2="$listdir2"
183 find $listdir2 -type f -name "list.identident"
187 done | sed 's%/list.identident$%%' | \
188 sed 's%.*%&/%' | sort | sed 's%/$%%' | \
189 while read listdir; do
190 if [[ "$findsub" == "true" ]]; then
191 find $listdir -maxdepth 1 -type f \( ! -name "*.*ident" \)
192 else
193 if [[ -z "$olistdir" ]]; then
194 olistdir="$listdir"
195 find $listdir -type f \( ! -name "*.*ident" \)
196 else
197 if [[ ! "$listdir" =~ ^$olistdir/.* ]]; then
198 olistdir="$listdir"
199 find $listdir -type f \( ! -name "*.*ident" \)
203 done
206 export LC_COLLATE=C
208 [[ -z "$1" ]] && lsall && exit 0
209 [[ "$1" == "*" ]] && lsgroups && exit 0
211 if [[ "$1" == "-o" ]]; then
212 extractor=1
213 shift
214 else
215 if [[ "$1" == "-a" ]]; then
216 extractand=1
217 shift
221 [[ -z "$1" ]] && echo "Add search params" && exit 1
223 OIFS=$IFS
224 IFS=$'\n'
225 params_linefeed="$*"
226 IFS=$OIFS
227 #params_def="$@"
229 for i in $params_linefeed; do
230 if [[ "${i::1}" == "-" ]]; then
231 findsub=true
232 break
234 done
236 if [[ -z "$extractand" ]]; then
237 lsor "$params_linefeed"
238 else
239 lsand "$params_linefeed"