dotfiles/bin/shp-mods/LINK

112 lines
3.2 KiB
Bash
Executable File

#! /bin/sh
timestamp() {
output="$(stat -c'%Y' "$1" 2>/dev/null)"
if [ $? != 0 ]; then
eval "$(stat -s "$1" 2>/dev/null)"
output="$st_mtime"
fi
echo "$output"
}
limit="$1"
shift
files=""
while [ $# -ne 0 ]; do
case "$1" in
FROM)
files="$files$(find "$2" -depth 1)$(echo)"
shift
shift
;;
SORT)
case "$2" in
ALPHA)
files="$(echo "$files" | sort -f -k 1,1)"
;;
TIME)
files="$(echo "$files" | while read -r file; do
path="$(echo "$file" | awk '{ print $1 }')"
time="$(timestamp "$path")"
echo "$time $file"
done | sort -k 1,1 | awk '{ $1="" }1')"
;;
TITLE)
files="$(echo "$files" | while read -r file; do
path="$(echo "$file" | awk '{ print $1 }')"
title="$(cat "$file" | sed '1!d')"
echo "$path $title"
done | sort -k 2 | awk '{ print $1 }')"
;;
SUBTITLE)
files="$(echo "$files" | while read -r file; do
path="$(echo "$file" | awk '{ print $1 }')"
subtitle="$(cat "$file" | sed '2!d')"
echo "$path $subtitle"
done | sort -k 2 | awk '{ print $1 }')"
;;
esac
shift
shift
;;
REV)
files="$(echo "$files" | tac)"
shift
;;
EXCLUDE)
files="$(echo "$files" | sed "/$2/d")"
shift
shift
;;
INCLUDE)
files="$(echo "$files" | grep -E "$2")"
shift
shift
;;
LABEL)
case "$2" in
DATE)
files="$(echo "$files" | while read -r file; do
[ "$file" = "" ] && continue
path="$(echo "$file" | awk '{ print $1 }')"
time="$(timestamp "$path")"
echo "$file $(date -r "$path" '+%Y-%m-%d')"
done)"
;;
TITLE)
files="$(echo "$files" | while read -r file; do
[ "$file" = "" ] && continue
path="$(echo "$file" | awk '{ print $1 }')"
echo "$file $(head -n1 "$path" 2> /dev/null | sed 's/^#//g' | sed 's/^ //g')"
done)"
;;
SUBTITLE)
files="$(echo "$files" | while read -r file; do
[ "$file" = "" ] && continue
path="$(echo "$file" | awk '{ print $1 }')"
echo "$file $(cat "$path" 2> /dev/null | sed '2!d' | sed 's/^##//g' | sed 's/^ //g')"
done)"
esac
shift
shift
;;
esac
done
[ "$files" = "" ] && exit 0
[ "$limit" != "ALL" ] && files="$(echo "$files" | head -n"$limit")"
echo "$files" | while read -r file; do
echo "=> $file"
done