feat(user/rsync_tranches.sh):Add bash function for parallel rsync
[BK-2020-03.git] / unitproc / bkt-filter_no_dots
1 #!/usr/bin/env bash
2
3 filter_no_dots() {
4 # Desc: Filters stdin lines for paths with basenames that are not dotfiles
5 # Usage: printf "foo\n" | filter_no_dots [path]
6 # Input: stdin (consumes)
7 # args
8 # Output: stdout (only outputs lines if basename is not a dotfile)
9 # Version: 0.0.1
10 # Depends: GNU bash (v5.1.16)
11
12 local input_stdin input_psarg buffer re output;
13
14 # Store stdin
15 if [[ -p /dev/stdin ]]; then
16 input_stdin="$(cat -)";
17 fi;
18
19 # Store arguments
20 if [[ $# -gt 0 ]]; then
21 input_psarg="$*";
22 fi;
23
24 # Combine as buffer array elements
25 ## Read in stdin
26 if [[ -n $input_stdin ]]; then
27 while read -r line; do
28 buffer+=("$line");
29 done < <(printf "%s\n" "$input_stdin");
30 fi;
31 ## Read in positional arguments
32 if [[ -n $input_psarg ]]; then
33 for arg in "$@"; do
34 buffer+=("$arg");
35 done;
36 fi;
37
38 # Form output array
39 re="^\."; # first char is a dot
40 while read -r line; do
41 # Get path basename
42 file_name="$(basename "$line")";
43 # Add path to output if basename not a dotfile
44 if [[ ! "$file_name" =~ $re ]]; then
45 output+=("$line");
46 else
47 continue;
48 fi;
49 done < <( printf "%s\n" "${buffer[@]}" );
50
51 # Print output array to stdout
52 printf "%s\n" "${output[@]}";
53 }; # Filters stdin lines for paths with basenames that are not dotfiles
54
55 # Test
56 printf "foo\n.bar\nbaz\n" | filter_no_dots "$HOME/.local" "$HOME/"