resrm
resrm is a safe, drop-in replacement for the Linux rm command with undo/restore support.
It moves files to a per-user trash instead of permanently deleting them, while still allowing full sudo support for root-owned files.
Features
-
Move files and directories to a Trash folder instead of permanent deletion
-
Restore deleted files by short ID or exact basename
-
Empty trash safely
-
Supports
-r,-f,-i,--skip-trashoptions -
Works with
sudofor root-owned files -
Automatically prunes Trash entries older than
$RESRM_TRASH_LIFEdays (default 7, minimum 1)Note: if you need immediate deletion, use the
--skip-trashflag.
Installation
From GuardUtils package repo
This is the preferred method of installation.
Debian/Ubuntu
1) Import the GPG key
sudo mkdir -p /usr/share/keyrings
curl -fsSL https://repo.sysmd.uk/guardutils/guardutils.gpg | sudo gpg --dearmor -o /usr/share/keyrings/guardutils.gpg
The GPG fingerprint is 0032C71FA6A11EF9567D4434C5C06BD4603C28B1.
2) Add the APT source
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/guardutils.gpg] https://repo.sysmd.uk/guardutils/debian stable main" | sudo tee /etc/apt/sources.list.d/guardutils.list
3) Update and install
sudo apt update
sudo apt install resrm
Fedora/RHEL
1) Import the GPG key
sudo rpm --import https://repo.sysmd.uk/guardutils/guardutils.gpg
2) Add the repository configuration
sudo tee /etc/yum.repos.d/guardutils.repo > /dev/null << 'EOF'
[guardutils]
name=GuardUtils Repository
baseurl=https://repo.sysmd.uk/guardutils/rpm/$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://repo.sysmd.uk/guardutils/guardutils.gpg
EOF
4) Update and install
sudo dnf upgrade --refresh
sudo dnf install resrm
From PyPI
NOTE: To use resrm with sudo, the path to resrm must be in the $PATH seen by root.
Either:
- install
resrmasroot, or - add the path to
resrmto thesecure_pathparameter in/etc/sudoers. For example, where/home/user/.local/binis whereresrmis:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/.local/bin"
Install with:
pip install resrm
From this repository
git clone https://git.sysmd.uk/guardutils/resrm.git
cd resrm/
poetry install
Usage
# Move files to trash
resrm file1 file2
# Recursive remove of a directory
resrm -r mydir
# Force remove (ignore nonexistent)
resrm -f file
# Interactive remove
resrm -i file
# Permanent delete (bypass trash)
resrm --skip-trash file
# List trash entries
resrm -l
# Restore a file by ID or basename
resrm --restore <id|name>
# Show full details of trashed item
resrm --inspect <id|name>
# Empty the trash permanently
resrm --empty
Trash Location
Normal users: ~/.local/share/resrm/files
Root user: /root/.local/share/resrm/files
Configuration
To control how long trashed files are kept, add this line to your shell configuration (e.g. ~/.bashrc):
export RESRM_TRASH_LIFE=10
TAB completion
Add this to your .bashrc
eval "$(register-python-argcomplete resrm)"
And then
source ~/.bashrc
pre-commit
This project uses pre-commit to run automatic formatting and security checks before each commit (Black, Bandit, and various safety checks).
To enable it:
poetry install
poetry run pre-commit install
This ensures consistent formatting, catches common issues early, and keeps the codebase clean.
Support
If you find resrm useful, consider supporting its development:
Metadata
Release files for resrm 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| resrm-0.5.0.tar.gz | 19.4 kB | Without provenance | Details for resrm-0.5.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| resrm-0.5.0-py3-none-any.whl | Python 3 | none | any | Details for resrm-0.5.0-py3-none-any.whl |
Total release size: 39.9 kB
Release files / resrm-0.5.0.tar.gz
| Download URL | resrm-0.5.0.tar.gz |
|---|---|
| Size | 19.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
31036844d183e8eb7adea0e9ba71b424291b0213fe287f8bff3b5d07227ad73d
|
|
BLAKE2b-256 checksum How to use checksums |
4aa5889f223b216df185820758632c4a6f1ef90147aaabd03cb5dca3b5efcc3c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.5.0 CPython/3.14.7 Linux/7.2.8-100.fc43.x86_64
|
Release files / resrm-0.5.0-py3-none-any.whl
| Download URL | resrm-0.5.0-py3-none-any.whl |
|---|---|
| Size | 20.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9a1f7ad86c2c7e73b0f574437d8755402e6ef8c5c2db6b311333ed6b3977edf6
|
|
BLAKE2b-256 checksum How to use checksums |
3114715fdbbad58a0ba724bc03bc1df552dc480c941469045f378860317615e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.5.0 CPython/3.14.7 Linux/7.2.8-100.fc43.x86_64
|
Security for resrm 0.5.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.