summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Bobov <anton@bobov.name>2026-04-20 13:23:24 +0500
committerAnton Bobov <anton@bobov.name>2026-07-24 14:21:45 +0500
commit3f781f4c75eac2a582213ad37a742d44e3fb05dd (patch)
tree354521cfe264f0cd2d61baf8c5eb2ce4ddf145f1
parentc232cc208281078f2fae1d2047fa582c28e81cc5 (diff)
add trash-all script for cross-filesystem trash management
-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" "$@")"