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.
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.
Steps :
sudo mkdir --parent /.Trash
sudo chmod a+rw /.Trash
sudo chmod +t /.Trash
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.
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.
File trashed from the home partition will be moved here:
~/.local/share/Trash/
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
- 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
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"
Debian/Ubuntu (apt):
sudo apt install trash-cli
Arch Linux (pacman):
sudo pacman -S trash-cli
Fedora (dnf):
sudo dnf install trash-cli
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
If you discover a bug please report it here:
You can send me an email using andrea@andreafrancia.it.
Environment setup:
virtualenv env --no-site-packages
source env/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 to Paypal donors.
Thanks to project contributors.
Thanks to JetBrains for their license for Open Source Development