-#
+#! /bin/bash
## open : string -> unit
##
fi
}
-## p : string -> unit
-p() {
- local -r usage='Usage: p [FILE] NAME'
- local name
- local file
-
- case "$#" in
- 0)
- echo "$usage" >&2
- return 1;;
- 1)
- file=~/._p/p
- name="$1";;
- 2)
- file="$1"
- name="$2";;
- *)
- echo "$usage" >&2
- return 1;;
- esac
+_dl_script() {
+cat << EOF
+#! /bin/bash
+wget -c \$(< ./url)
+EOF
+}
- awk \
- -v _s="$name" \
- '
- BEGIN {_s = tolower(_s)}
-
- # TODO fzf/dmenu select instead of searching:
- /^[a-zA-Z]/ && tolower($1) ~ _s && NF >= 2 {
- n++
- s = $1
- p = $NF
- if (NF == 2) {
- e = ""
- u = ""
- } else if (NF == 3) {
- e = $2
- u = ""
- } else {
- e = $2
- u = $3
- } # TODO What would NF > 4 mean?
-
- printf("%d [O] s:\"%s\", e:\"%s\", u:\"%s\"\n", n, s, e, u) > "/dev/stderr"
- if (match(u, "@")) {
- tmp = e
- e = u
- u = tmp
- printf("%d [C] s:\"%s\", e:\"%s\", u:\"%s\"\n", n, s, e, u) > "/dev/stderr"
- }
- ps[n] = p
- }
+dl() {
+ local -r name="$1"
+ local -r url="$2"
- END {
- printf "%s", ps[n] # XXX Intentionally avoiding newline in the result.
- if (n == 1) {
- exit 0
- } else if (n == 0) {
- printf "[ERROR] Found nothing.\n" > "/dev/stderr"
- exit 1
- } else if (n > 1) {
- # TODO fzf-select which of the records the user (ahem, me) wants.
- printf "[WARNING] Found more than one record. Selecting the last one.\n" > "/dev/stderr"
- exit 0
- }
- }
- ' \
- "$file" \
- | xsel -i -b -t 30000
+ local -r timestamp="$(date --iso-8601=ns)"
+ local -r dir="$HOME"/dl/adhoc/"$timestamp"--"$name"
+ local -r url_file_path="${dir}/url"
+ local -r dl_file_path="${dir}/dl"
+
+ mkdir -p "$dir"
+ touch "$url_file_path"
+ if [ "$url" != '' ]
+ then
+ echo "$url" > "$url_file_path"
+ fi
+ _dl_script > "$dl_file_path"
+ chmod +x "$dl_file_path"
+ cd "$dir"
}
## web search
}
## Top Disk-Using directories
-## TODO: Consider using numfmt instead of awk
## tdu : path-string -> (size:number * directory:path-string) list
tdu() {
local -r root_path="$1"
- du "$root_path" \
- | awk '
- {
- size = $1
- path = $0
- sub("^" $1 "\t+", "", path)
- paths[path] = size
- if (size > max)
- max = size
- }
-
- END {
- for (path in paths) {
- size = paths[path]
- pct = 100 * (size / max)
- gb = size / 1024 / 1024
- printf("%6.2f %3d%% %s\n", gb, pct, path)
- }
- }
- ' \
- | sort -r -n -k 1 \
+ du -h "$root_path" \
+ | sort -r -h -k 1 \
| head -50 \
| tac
# A slight optimization: head can exit before traversing the full input.
find "$@" -type f -printf '%s\t%p\0' \
| sort -z -n -k 1 \
| tail -z -n 50 \
- | gawk -v RS='\0' '
- {
- size = $1
- path = $0
- sub("^" $1 "\t+", "", path)
- gb = size / 1024 / 1024 / 1024
- printf("%f\t%s\n", gb, path)
- }'
+ | numfmt -z --to=iec \
+ | tr '\0' '\n'
}
# Most-recently modified file system objects
echo 'accounting'
+ # TODO Bring back seesion and client listing, but per server/socket.
printf '%stmux\n' "$indent_unit"
ps -eo comm,cmd \
| awk '
echo "${indent_unit}-->"
+ # TODO Populate pid->cmd dict from `ps -eo pid,comm` and lookup progs there
+ # since netstat -p output comes out truncated.
+
sudo -n netstat -tulnp \
| awk -v indent="${indent_unit}${indent_unit}" '
NR > 2 && ((/^tcp/ && proc = $7) || (/^udp/ && proc = $6)) {