Skip to main content

trash-cli - Command Line Interface to FreeDesktop.org Trash.

Downloads

Donate

简体中文

trash-cli trashes files recording the original path, deletion date, and permissions. It uses the same trashcan used by KDE, GNOME, and XFCE, but you can invoke it from the command line (and scripts).

It provides these commands:

trash-put           trash files and directories.
trash-empty         empty the trashcan(s).
trash-list          list trashed files.
trash-restore       restore a trashed file.
trash-rm            remove individual files from the trashcan.

Usage

Trash a file:

$ trash-put foo

List trashed files:

$ trash-list
2008-06-01 10:30:48 /home/andrea/bar
2008-06-02 21:50:41 /home/andrea/bar
2008-06-23 21:50:49 /home/andrea/foo

Search for a file in the trashcan:

$ trash-list | grep foo
2007-08-30 12:36:00 /home/andrea/foo
2007-08-30 12:39:41 /home/andrea/foo

Restore a trashed file:

$ trash-restore
0 2007-08-30 12:36:00 /home/andrea/foo
1 2007-08-30 12:39:41 /home/andrea/bar
2 2007-08-30 12:39:41 /home/andrea/bar2
3 2007-08-30 12:39:41 /home/andrea/foo2
4 2007-08-30 12:39:41 /home/andrea/foo
What file to restore [0..4]: 4
$ ls foo
foo

Restore a trashed file while overwriting existing files:

$ echo "original">foo
$ ls
foo
$ trash foo
$ echo "new">foo
$ trash-restore --overwrite
0 2022-11-01 22:15:00 /home/andrea/foo
What file to restore [0..0]: 0
$ cat foo
original

Restore multiple trashed files separated by ‘,’, also support range:

$ trash-restore
0 2007-08-30 12:36:00 /home/andrea/foo
1 2007-08-30 12:39:41 /home/andrea/bar
2 2007-08-30 12:39:41 /home/andrea/bar2
3 2007-08-30 12:39:41 /home/andrea/foo2
What file to restore [0..3]: 0-2, 3
$ ls foo bar bar2 foo2
foo bar bar2 foo2

Remove all files from the trashcan:

$ trash-empty

Remove only the files that have been deleted more than <days> ago:

$ trash-empty <days>

Example:

$ date
Tue Feb 19 20:26:52 CET 2008
$ trash-list
2008-02-19 20:11:34 /home/einar/today
2008-02-18 20:11:34 /home/einar/yesterday
2008-02-10 20:11:34 /home/einar/last_week
$ trash-empty 7
$ trash-list
2008-02-19 20:11:34 /home/einar/today
2008-02-18 20:11:34 /home/einar/yesterday
$ trash-empty 1
$ trash-list
2008-02-19 20:11:34 /home/einar/today

Remove only files matching a pattern:

$ trash-rm \*.o

Note: you need to use quotes in order to protect the pattern from shell expansion.

FAQ

How to create a top level .Trash dir?

Steps

sudo mkdir --parent /.Trash
sudo chmod a+rw /.Trash
sudo chmod +t /.Trash

Can I alias rm to trash-put?

You can but you shouldn’t. In the early days I thought it was a good idea to do that but now I changed my mind.

Although the interface of trash-put seems to be compatible with rm, it has different semantics which will cause you problems. For example, while rm requires -R for deleting directories trash-put does not.

But sometimes I forget to use trash-put, really can’t I?

You could alias rm to something that will remind you to not use it:

alias rm='echo "This is not the command you are looking for."; false'

Then, if you really want to use rm, simply prepend a backslash to bypass the alias:

\rm file-without-hope

Note that Bash aliases are used only in interactive shells, so using this alias should not interfere with scripts that expect to use rm.

Where the trashed files go?

File trashed from the home partition will be moved here:

~/.local/share/Trash/

How to auto delete files older that 30 days?

Run this:

(crontab -l ; echo "@daily $(which trash-empty) 30") | crontab -

This will update your crontab file with a trash-empty command that runs daily and removes files older than 30 days. To review your crontab use: crontab -l

Installation

The easy way

Requirements:
  • Python 3 (Python 2.7 also work)

  • pipx (optional, to install in a clean environment)

If pipx is available:

pipx install trash-cli

Alternatively, install with vanilla pip:

pip install trash-cli

Note: you may want add ~/.local/bin to the PATH:

echo 'export PATH="$PATH":~/.local/bin' >> ~/.bashrc
source ~/.bashrc # reload .bashrc

For uninstalling use:

pipx uninstall trash-cli

or:

pip uninstall trash-cli

Bleeding Edge (from sources)

First of all you need to uninstall any previous version of trash-cli:

$ [sudo] pip uninstall trash-cli # remove the previous version (with pip)
$ [sudo] apt-get remove trash-cli # remove the previous version (with apt)
$ [sudo] yum uninstall trash-cli # remove the previous version (with yum)
$ ... # refer to the package manager of your distribution

Then install the latest version from git:

$ [sudo] pip install git+https://github.com/andreafrancia/trash-cli

After the user installation you may want add this line to your .bashrc/.zshrc:

export PATH=~/.local/bin:"$PATH"

From package manager

Debian/Ubuntu (apt):

sudo apt install trash-cli

Arch Linux (pacman):

sudo pacman -S trash-cli

Fedora (dnf):

sudo dnf install trash-cli

MacOS (Homebrew):

brew install trash-cli
echo 'export PATH="~/homebrew/opt/trash-cli/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Install shell completions

You need install by:

pipx install 'trash-cli[completion]'

or:

pip install 'trash-cli[completion]'

Then:

cmds=(trash-empty trash-list trash-restore trash-put trash)
for cmd in ${cmds[@]}; do
  $cmd --print-completion bash | sudo tee /usr/share/bash-completion/completions/$cmd
  $cmd --print-completion zsh | sudo tee /usr/share/zsh/site-functions/_$cmd
  $cmd --print-completion tcsh | sudo tee /etc/profile.d/$cmd.completion.csh
done

Missing support for BRTFS volumes

trash-cli does not support BRTFS volumes. I don’t have any system nor time and/or knowledge to implement this kind of support.

If you need a trash implementation that you can checkout the rmw project.

If you want, can and know how to add support to BRTFS with sensibile automation tests please send a pull request.

Bugs

If you discover a bug please report it here:

https://github.com/andreafrancia/trash-cli/issues

Feedback

You can send me an email using andrea@andreafrancia.it.

Development

Environment setup:

python -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt -r requirements.txt

Running tests:

pytest -m 'not slow'        # run only fast tests
pytest -m 'slow'            # run slow tests
pytest                      # run all tests

Thanks

Thanks to Paypal donors.

Thanks to project contributors.

Thanks to JetBrains for their license for Open Source Development

Metadata

Release files for toolrm 0.24.5.26

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for toolrm 0.24.5.26
File Size Uploaded Provenance Actions
toolrm-0.24.5.26.tar.gz 61.2 kB Without provenance Details for toolrm-0.24.5.26.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for toolrm 0.24.5.26
File Interpreter ABI Platform Actions
toolrm-0.24.5.26-py3-none-any.whl Python 3 none any Details for toolrm-0.24.5.26-py3-none-any.whl

Total release size: 167.4 kB

Release files / toolrm-0.24.5.26.tar.gz

Download URL toolrm-0.24.5.26.tar.gz
Size 61.2 kB
Tags Source
SHA-256 checksum
How to use checksums
1994e2baf7b206f1e6646bd9e74d9dfb351daf9c33fc58f9d7369d4ffe0489c6
BLAKE2b-256 checksum
How to use checksums
1a0631125df49bf03cf941964ac34069c423a6e3d006599b7e9eed5f8b46912c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / toolrm-0.24.5.26-py3-none-any.whl

Download URL toolrm-0.24.5.26-py3-none-any.whl
Size 106.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5a27311bc09b72395f3412a6ff136fdb143f613ea3021fdaad6e146893c9137f
BLAKE2b-256 checksum
How to use checksums
57551c220dcbca0d22f0c9b949c76aeabbe5bca1415482333a1d2472f9164c5b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Security for toolrm 0.24.5.26

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.

Release history Release notifications | RSS feed

This release

0.24.5.26 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page