diff options
| -rwxr-xr-x | trash-all | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/trash-all b/trash-all new file mode 100755 index 0000000..cd75bb5 --- /dev/null +++ b/trash-all @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# @describe Runs trash-cli commands across all mounted filesystems with user trash directories +# @meta require-tools mount,cut,trash-empty,trash-list + +_list_mounts() { + mount -l | cut -d ' ' -f 3 +} + +_find_trash_dirs() { + local home_trash_dir="$HOME/.local/share/Trash" + local user_trash_dir=".Trash-$UID" + [ -d "$home_trash_dir" ] && echo "$home_trash_dir" + + local mount_trash_dir + for mount_point in $(_list_mounts); do + mount_trash_dir="$mount_point/$user_trash_dir" + [ -d "$mount_trash_dir" ] && echo "$mount_trash_dir" + done +} + +_trash_exec() { + local cmd="$1" + shift + local trash_cli_args=() + for trash_dir in $(_find_trash_dirs); do + trash_cli_args+=(--trash-dir "$trash_dir") + done + + "$cmd" "${trash_cli_args[@]}" "$@" +} + +# @cmd Purge trashed files +# @alias e +# @meta require-tools trash-empty +empty() { + _trash_exec trash-empty "$@" +} + +# @cmd List trashed files +# @alias l +# @meta require-tools trash-list +list() { + _trash_exec trash-list "$@" +} + +eval "$(argc --argc-eval "$0" "$@")" |
