summaryrefslogtreecommitdiff
path: root/trash-all
diff options
context:
space:
mode:
Diffstat (limited to 'trash-all')
-rwxr-xr-xtrash-all49
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" "$@")"