[READ-ONLY] Mirror of https://github.com/mrgnw/scripts.
1#!/usr/bin/env zsh
2
3usage() {
4 echo "Usage: $(basename "$0") <images|videos|media> [-x ext ...]" >&2
5 echo >&2
6 echo "Prints glob patterns one per line for use in scripts." >&2
7 echo >&2
8 echo " images — raster images, raw formats, and modern compressed formats" >&2
9 echo " raw — camera raw formats (arw, cr2, dng, nef, etc.)" >&2
10 echo " videos — common video container formats" >&2
11 echo " media — both images and videos" >&2
12 echo >&2
13 echo "Options:" >&2
14 echo " -x, --exclude ext [ext ...] exclude one or more extensions (without leading dot)" >&2
15 echo >&2
16 echo "Examples:" >&2
17 echo " $(basename "$0") images -x heic heif" >&2
18 echo " $(basename "$0") images -x jpg jpeg" >&2
19 echo " $(basename "$0") videos -x wmv flv" >&2
20 exit 1
21}
22
23print_raw() {
24 print -l \
25 "*.arw" "*.cr2" "*.cr3" "*.dng" "*.nef" \
26 "*.orf" "*.raf" "*.raw" "*.rw2" "*.pef" "*.srw" "*.x3f"
27}
28
29print_images() {
30 print -l \
31 "*.jpg" "*.jpeg" \
32 "*.png" "*.gif" "*.bmp" \
33 "*.tiff" "*.tif" "*.tga" \
34 "*.webp" "*.avif" \
35 "*.heic" "*.heif" \
36 "*.jxl" \
37 "*.psd"
38 print_raw
39}
40
41print_videos() {
42 print -l \
43 "*.mp4" "*.m4v" \
44 "*.mov" \
45 "*.mkv" \
46 "*.avi" \
47 "*.webm" \
48 "*.ts" "*.mts" "*.m2ts" \
49 "*.wmv" "*.flv"
50}
51
52# Parse type
53case "${1:-}" in
54 images|img|i) type=images ;;
55 raw|r) type=raw ;;
56 videos|video|vid|v) type=videos ;;
57 media|all) type=media ;;
58 *) usage ;;
59esac
60shift
61
62# Parse -x / --exclude
63excludes=()
64while [[ $# -gt 0 ]]; do
65 case "$1" in
66 -x|--exclude)
67 shift
68 while [[ $# -gt 0 && "$1" != -* ]]; do
69 excludes+=("$1")
70 shift
71 done
72 ;;
73 *) usage ;;
74 esac
75done
76
77emit() {
78 case "$type" in
79 images) print_images ;;
80 raw) print_raw ;;
81 videos) print_videos ;;
82 media) print_images; print_videos ;;
83 esac
84}
85
86if [[ ${#excludes[@]} -gt 0 ]]; then
87 pattern=$(printf "%s|" "${excludes[@]}")
88 pattern="\.(${pattern%|})$"
89 emit | grep -vEi "$pattern"
90else
91 emit
92fi