utils upgrade

This commit is contained in:
2026-02-21 18:10:09 +08:00
parent f4c500d6cd
commit 153776c54e
31 changed files with 608 additions and 95 deletions

View File

@@ -1,3 +1,17 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail
watch -tn 1 date '+%l:%M:%S%p' if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Display current time and unix timestamp (updates every second).
Options:
-h, --help Show this help message
EOF
exit 0
fi
watch -tn 1 date '+%H:%M:%S%n%s'

View File

@@ -1,6 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] [file]
Copy content to system clipboard.
Options:
-h, --help Show this help message
Arguments:
file File to copy (reads from stdin if not specified)
EOF
exit 0
fi
if hash pbcopy 2>/dev/null; then if hash pbcopy 2>/dev/null; then
exec pbcopy exec pbcopy
elif hash xclip 2>/dev/null; then elif hash xclip 2>/dev/null; then

View File

@@ -1,6 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <url>
Display detailed curl statistics for a URL.
Options:
-h, --help Show this help message
Arguments:
url URL to fetch statistics for
EOF
exit 0
fi
curl -sLw @- -o /dev/null "$@" <<'EOF' curl -sLw @- -o /dev/null "$@" <<'EOF'
URL:\t\t\t%{url}\n URL:\t\t\t%{url}\n
Address:\t\t%{remote_ip}:%{remote_port}\n Address:\t\t%{remote_ip}:%{remote_port}\n

View File

@@ -1,10 +1,13 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [ -z "$1" ]; then if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>" echo "Usage: $(basename "$0") <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
echo " extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]" echo " $(basename "$0") <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
exit 1 echo
echo "Options:"
echo " -h, --help Show this help message"
exit 0
fi fi
for n in "$@"; do for n in "$@"; do

View File

@@ -1,3 +1,17 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Flush DNS cache using resolvectl.
Options:
-h, --help Show this help message
EOF
exit 0
fi
sudo resolvectl flush-caches sudo resolvectl flush-caches

View File

@@ -1,5 +1,25 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -eo pipefail
show_usage() {
cat <<EOF
Usage: $(basename "$0") [-h] [search]
List or search HTTP status codes.
Options:
-h, --help Show this help message
Arguments:
search Search term to filter status codes
EOF
}
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
show_usage
exit 0
fi
statuses="100 Continue statuses="100 Continue
101 Switching Protocols 101 Switching Protocols

View File

@@ -1,4 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <command>
Check if a command is available.
Options:
-h, --help Show this help message
Arguments:
command Command to check
Returns 0 if command exists, 1 otherwise.
EOF
exit 0
fi
[ -n "$1" ] && command -v "$1" || exit 1 [ -n "$1" ] && command -v "$1" || exit 1

View File

@@ -1,4 +1,24 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
echo -n "$@" | wc -c | awk '{print $1}' if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <string>
Display length of a string.
Options:
-h, --help Show this help message
Arguments:
string String to measure
EOF
exit 0
fi
if [[ ! -t 0 ]]; then # Read from stdin (pipe)
wc -c | awk '{print $1}'
else # Read from arguments
echo -n "$@" | wc -c | awk '{print $1}'
fi

View File

@@ -1,5 +1,27 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <lineno> <file>
Display a specific line from a file.
Options:
-h, --help Show this help message
Arguments:
lineno Line number to display (1-based)
file File to read from
EOF
exit 0
fi
lineno="$1"; shift lineno="$1"; shift
sed -n "${lineno}p" -- "$@"
if [[ ! -t 0 ]]; then # Read from stdin (pipe)
sed -n "${lineno}p"
else # Read from file
sed -n "${lineno}p" -- "$@"
fi

View File

@@ -1,4 +1,21 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <directory>
Create directory and change to it.
Options:
-h, --help Show this help message
Arguments:
directory Directory to create and enter
EOF
exit 0
fi
mkdir -p "$1" mkdir -p "$1"
cd "$1" || exit cd "$1" || false

View File

@@ -1,6 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <script>
Create a new bash script with boilerplate.
Options:
-h, --help Show this help message
Arguments:
script Script filename to create
EOF
exit 0
fi
if [ ! $# -eq 1 ]; then if [ ! $# -eq 1 ]; then
echo 'mksh takes one argument' 1>&2 echo 'mksh takes one argument' 1>&2
exit 1 exit 1
@@ -9,13 +25,11 @@ elif [ -e "$1" ]; then
exit 1 exit 1
fi fi
echo '#!/usr/bin/env bash {
set -e echo '#!/usr/bin/env bash'
set -u echo 'set -eo pipefail'
set -o pipefail echo
} > "$1"
' > "$1"
chmod u+x "$1" chmod u+x "$1"
exec "$EDITOR" "$1"
nano "$1"

View File

@@ -1,4 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail
curl http://ipecho.net/plain if [[ "$1" == "-h" || "$1" == "--help" ]]; then
echo cat <<EOF
Usage: $(basename "$0") [-h]
Display external IP address.
Options:
-h, --help Show this help message
EOF
exit 0
fi
if [[ "$1" == "-2" ]]; then
curl -fsSL https://api.myip.com | jq -r .ip
else
curl -fsSL http://ipecho.net/plain
echo
fi

View File

@@ -1,3 +1,17 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail
date '+%d.%m.%Y %H:%M:%S' if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Display current time and unix timestamp.
Options:
-h, --help Show this help message
EOF
exit 0
fi
date '+%H:%M:%S%n%s'

View File

@@ -1,4 +1,20 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <files...>
Change ownership of files to current user.
Options:
-h, --help Show this help message
Arguments:
files Files or directories to change ownership
EOF
exit 0
fi
sudo chown "$(whoami)". -R --changes --preserve-root "$@" sudo chown "$(whoami)". -R --changes --preserve-root "$@"

View File

@@ -1,6 +1,19 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Paste content from system clipboard.
Options:
-h, --help Show this help message
EOF
exit 0
fi
if hash pbpaste 2>/dev/null; then if hash pbpaste 2>/dev/null; then
exec pbpaste exec pbpaste
elif hash xclip 2>/dev/null; then elif hash xclip 2>/dev/null; then

View File

@@ -1,4 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Set default permissions for files and directories in current directory.
Options:
-h, --help Show this help message
Sets:
- Files: 0664 (rw-rw-r--)
- Directories: 0775 (rwxrwxr-x)
EOF
exit 0
fi
# TODO permissions via arguments # TODO permissions via arguments

View File

@@ -1,12 +1,29 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
process_list="$(ps -eo 'pid command')" if [[ "$1" == "-h" || "$1" == "--help" ]]; then
if [[ $# != 0 ]]; then cat <<EOF
Usage: $(basename "$0") [-h] [filter]
Display running processes.
Options:
-h, --help Show this help message
Arguments:
filter Optional filter string to match processes
EOF
exit 0
fi
if [[ $# == 0 ]]; then
process_list="$(ps -eo 'pid command')"
else
process_list="$(echo "$process_list" | grep -Fiw "$@")" process_list="$(echo "$process_list" | grep -Fiw "$@")"
fi fi
echo "$process_list" | echo "$process_list" \
grep -Fv "${BASH_SOURCE[0]}" | | grep -Fv "${BASH_SOURCE[0]}" \
grep -Fv grep | | grep -Fv grep \
GREP_COLORS='mt=00;35' grep -E --colour=auto '^\s*[[:digit:]]+' | GREP_COLORS='mt=00;35' grep -E --colour=auto '^\s*[[:digit:]]+'

View File

@@ -1,6 +1,19 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Open a temporary scratchpad file in \$EDITOR.
Options:
-h, --help Show this help message
EOF
exit 0
fi
file="$(mktemp)" file="$(mktemp)"
echo "Editing $file" echo "Editing $file"
exec "$EDITOR" "$file" exec "$EDITOR" "$file"

View File

@@ -1,11 +1,24 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
port='8888' if [[ "$1" == "-h" || "$1" == "--help" ]]; then
if [ $# -eq 1 ]; then cat <<EOF
port="$1" Usage: $(basename "$0") [-h] [port]
Start a simple HTTP server in current directory.
Options:
-h, --help Show this help message
Arguments:
port Port number (default: 8888)
EOF
exit 0
fi fi
port="${1:-8888}"
if hash php 2>/dev/null; then if hash php 2>/dev/null; then
exec php -S "localhost:$port" exec php -S "localhost:$port"
elif hash python3 2>/dev/null; then elif hash python3 2>/dev/null; then

View File

@@ -1,6 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <seconds>
Set a timer with desktop notification.
Options:
-h, --help Show this help message
Arguments:
seconds Timer duration in seconds
EOF
exit 0
fi
sleep "$1" sleep "$1"
notify-send 'Timer complete!' \ notify-send 'Timer complete!' \
-u normal \ -u normal \

17
utils/.local/bin/today Executable file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Display current date.
Options:
-h, --help Show this help message
EOF
exit 0
fi
date '+%d.%m.%Y'

View File

@@ -1,3 +1,20 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <files...>
Move files to trash using gio.
Options:
-h, --help Show this help message
Arguments:
files Files or directories to move to trash
EOF
exit 0
fi
gio trash "$@" gio trash "$@"

View File

@@ -1,5 +1,21 @@
#!/usr/bin/env bash #!/husr/bin/env bash
set -u set -uo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <command>
Retry a command until it fails.
Options:
-h, --help Show this help message
Arguments:
command Command to repeatedly execute
EOF
exit 0
fi
"$@" "$@"
while [[ "$?" -eq 0 ]]; do while [[ "$?" -eq 0 ]]; do

View File

@@ -1,5 +1,21 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -u set -uo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <command>
Retry a command until it succeeds.
Options:
-h, --help Show this help message
Arguments:
command Command to repeatedly execute
EOF
exit 0
fi
"$@" "$@"
while [[ "$?" -ne 0 ]]; do while [[ "$?" -ne 0 ]]; do

16
utils/.local/bin/unixtime Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Display current unix timestamp.
Options:
-h, --help Show this help message
EOF
exit 0
fi
date '%s'

View File

@@ -1,10 +1,23 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h]
Upgrade system packages (apt, snap, flatpak).
Options:
-h, --help Show this help message
EOF
exit 0
fi
is apt >/dev/null && { is apt >/dev/null && {
echo echo
echo "===========================" echo "==========================="
echo "Upgarding apt packages..." echo "Upgrading apt packages..."
echo "===========================" echo "==========================="
echo echo
sudo apt update sudo apt update
@@ -14,7 +27,7 @@ is apt >/dev/null && {
is snap >/dev/null && { is snap >/dev/null && {
echo echo
echo "===========================" echo "==========================="
echo "Upgarding snap packages..." echo "Upgrading snap packages..."
echo "===========================" echo "==========================="
echo echo
sudo snap refresh sudo snap refresh
@@ -23,7 +36,7 @@ is snap >/dev/null && {
is flatpak >/dev/null && { is flatpak >/dev/null && {
echo echo
echo "===========================" echo "==========================="
echo "Upgarding flatpak packages..." echo "Upgrading flatpak packages..."
echo "===========================" echo "==========================="
echo echo
sudo flatpak update -y sudo flatpak update -y

View File

@@ -1,12 +1,38 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
curl "https://r.jina.ai/$1" \ if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <url>
Convert webpage URL to markdown using jina.ai.
Options:
-h, --help Show this help message
Arguments:
url URL of webpage to convert
EOF
exit 0
fi
# More details: https://jina.ai/reader/
url="$1"; shift
curl "https://r.jina.ai/$url" \
-sS \ -sS \
-H "DNT: 1" \ -H "DNT: 1" \
-H "X-Md-Hr: ---" \
-H "X-Base: final" \ -H "X-Base: final" \
-H "X-Engine: direct" \ -H "X-Timeout: 10" \
-H "X-Locale: ru-RU" \
-H "X-No-Cache: true" \
-H "X-Engine: browser" \
-H "X-User-Agent: url2md" \
-H "X-Md-Em-Delimiter: *" \ -H "X-Md-Em-Delimiter: *" \
-H "X-Md-Heading-Style: setext" \ -H "X-Md-Link-Style: inlined" \
-H "X-Return-Format: markdown" \
-H "X-Keep-Img-Data-Url: true" \
-H "X-Md-Link-Reference-Style: collapsed" \ -H "X-Md-Link-Reference-Style: collapsed" \
-H "X-Md-Link-Style: referenced" "$@"

View File

@@ -1,4 +1,30 @@
#!/usr/bin/env bash #!/usr/bin/env bash
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <input.mp4>
Compress MP4 video using ffmpeg.
Options:
-h, --help Show this help message
Arguments:
input.mp4 Input video file (must be .mp4)
Output:
<input>_compressed.mp4
EOF
exit 0
fi
filename="${1%.mp4}" filename="${1%.mp4}"
ffmpeg -i "$filename".mp4 -c:v libx264 -crf 28 -preset veryslow -c:a aac -b:a 128k "$filename"_compressed.mp4 ffmpeg \
-i "$filename".mp4 \
-c:v libx264 \
-crf 28 \
-preset veryslow \
-c:a aac \
-b:a 128k \
"$filename"_compressed.mp4

View File

@@ -1,6 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <pid>
Wait for a process to complete.
Options:
-h, --help Show this help message
Arguments:
pid Process ID to wait for
EOF
exit 0
fi
if hash systemd-inhibit 2>/dev/null; then if hash systemd-inhibit 2>/dev/null; then
systemd-inhibit \ systemd-inhibit \
--who=waitfor \ --who=waitfor \

View File

@@ -1,4 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#set -eo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <command>
Show detailed information about a command.
Options:
-h, --help Show this help message
Arguments:
command Command to investigate
EOF
exit 0
fi
set -x set -x
type "$1" 2>/dev/null type "$1" 2>/dev/null

View File

@@ -1,4 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail
# Download music from Youtube or Youtube Music # Download music from Youtube or Youtube Music
# and save as top quality flac file without video # and save as top quality flac file without video
@@ -6,6 +7,25 @@
# Usage: $ ytmusic https://www.youtube.com/watch?v=dQw4w9WgXcQ # Usage: $ ytmusic https://www.youtube.com/watch?v=dQw4w9WgXcQ
# More info: https://github.com/ytdl-org/youtube-dl # More info: https://github.com/ytdl-org/youtube-dl
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] <url>
Download music from YouTube or YouTube Music as FLAC.
Options:
-h, --help Show this help message
Arguments:
url YouTube or YouTube Music URL (playlist or video)
Output:
$HOME/ytmusic/<playlist>/<channel> - <title>.flac
EOF
exit 0
fi
DEST_PATH="${HOME}/ytmusic" DEST_PATH="${HOME}/ytmusic"
mkdir -p "${DEST_PATH}" mkdir -p "${DEST_PATH}"