andreafrancia
trash-cli
Python

Command line interface to the freedesktop.org trashcan.

Last updated Jul 7, 2026
4.4k
Stars
206
Forks
83
Issues
+3
Stars/day
Attention Score
82
Language breakdown
Python 99.3%
Shell 0.7%
โ–ธ Files click to expand
README

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 ago:: $ trash-empty

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.

.. _rmw: https://github.com/theimpossibleastronaut/rmw

If you want, can and know how to add support to BRTFS with sensible 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

.. |Downloads| image:: https://img.shields.io/pypi/dm/trash-cli .. |Donate| image:: https://www.paypalobjects.com/enGB/i/btn/btndonate_SM.gif .. Donate: https://www.paypal.com/cgi-bin/webscr?cmd=s-xclick&hostedbuttonid=93L6PYT4WBN5A .. ็ฎ€ไฝ“ไธญๆ–‡: https://github.com/andreafrancia/trash-cli/blob/master/READMEzh-CN.rst .. _project contributors: https://github.com/andreafrancia/trash-cli/graphs/contributors .. _JetBrains: https://jb.gg/OpenSource .. _pipx: https://pypa.github.io/pipx/

ยฉ 2026 GitRepoTrend ยท andreafrancia/trash-cli ยท Updated daily from GitHub