115 lines
4 KiB
Markdown
115 lines
4 KiB
Markdown
# Adding a trash can to Linux with trash-cli
|
|
|
|
There is no trash can for the Linux CLI. `rm` removes the data permanently, and there is practically no way of recovering deleted files reliably. `trash-cli` fills this role and lets you 'trash' files and directories and lets you recover 'trashed' items.
|
|
|
|
#### Installation
|
|
|
|
There are multiple ways to install `trash-cli`. It is open source and instructions can be found [on Github](https://github.com/andreafrancia/trash-cli?tab=readme-ov-file#installation).
|
|
|
|
#### Working with Aliases
|
|
|
|
As a side note: In this article, I will work with aliases. You can pick whatever alias you want, but it is not recommended to overwrite `rm` for `trash-cli`. Overwriting `rm` can cause issues with scripts, applications, and other features. That said, make sure not to overwrite an already-used command.
|
|
|
|
**Add the aliases** by adding them to your `~/.bashrc` file and load it with `source ~/.bashrc`. It may vary depending on your setup.
|
|
|
|
# Moving files into the trash can
|
|
|
|
You can move files into the trash can with `trash` or `trash-put`. It works with files and directories. I've been using it with the alias `tm` as it is close to `rm`.
|
|
|
|
Alias:
|
|
: `alias tm="trash"`
|
|
|
|
# Showing files and dirs in the trash can
|
|
|
|
You can use `trash-list` to show the content of the trash can.
|
|
|
|
```
|
|
$ trash-list
|
|
2024-02-03 22:53:27 /home/user/data/file2
|
|
2024-02-03 22:53:27 /home/user/data/file4
|
|
```
|
|
|
|
Alias:
|
|
: `alias tmls="trash-list"`
|
|
|
|
#### Looking for specific files in the trash can
|
|
|
|
```
|
|
$ trash-list | grep -i file4
|
|
2024-02-03 22:53:27 /home/user/data/file4
|
|
```
|
|
|
|
**Side note:** `-i` in `grep` makes the search case-insensitive.
|
|
|
|
Alias:
|
|
: `alias tmgr="trash-list | grep -i"`
|
|
|
|
|
|
#### Disk Space
|
|
|
|
The following directories store the trashed items:
|
|
`~/.local/share/Trash/files` and `/root/.local/share/Trash/files` *# trashed with `sudo`*
|
|
|
|
You can check the used space of the trash can with the following command:
|
|
: `du -sh ~/.local/share/Trash/files`
|
|
|
|
Alias:
|
|
: `alias tmdu="du -sh ~/.local/share/Trash/files`
|
|
|
|
# Getting things out of the trash
|
|
|
|
The advantage of trash-cli is the possibility to recover 'trashed' items.:
|
|
|
|
```
|
|
$ trash-restore
|
|
0 2024-02-03 23:05:54 /home/user/data/file5
|
|
1 2024-02-03 23:05:54 /home/user/data/dir3
|
|
2 2024-02-03 23:05:54 /home/user/data/file7
|
|
3 2024-02-03 23:05:54 /home/user/data/dir4
|
|
4 2024-02-03 22:53:27 /home/user/data/file4
|
|
What file to restore [0..4]:
|
|
```
|
|
|
|
Choose a single file or directory or **multiple items** with e.g. `2-3`. The chosen items will be **restored to their original destination**.
|
|
|
|
Alias:
|
|
: `alias tmre="trash-restore`
|
|
|
|
You can't restore an item when an item with the same name is in the original path.
|
|
|
|
`Refusing to overwrite existing file "file3".`
|
|
|
|
There is an `--overwrite` option, but it is not working for me and I haven't really looked into it as I don't need it that often.
|
|
|
|
# Emptying the trash can
|
|
|
|
There are multiple ways to do so. I haven't added any aliases for those options, but feel free to do so.
|
|
|
|
Removes all items from trash can:
|
|
: `trash-empty`
|
|
: There is no confirmation prompt!
|
|
|
|
Removes all items that have been deleted more than `n` days:
|
|
: `trash-empty n`
|
|
: `trash-empty 30`
|
|
|
|
#### Removing specific items
|
|
|
|
Removes specific items from the trash can:
|
|
: `trash-rm NameOfItem` *# removes all items called `NameOfItem`*
|
|
: `trash-rm '*.iso'` *# removes all `.iso` files*
|
|
: `trash-rm /path/of/items` *# should remove all items with a specific path, but it is not working for me*
|
|
|
|
#### Cron
|
|
|
|
Emptying the trash can be automated with [cron jobs](https://ittavern.com/cron-jobs-on-linux-comprehensive-guide/).
|
|
|
|
I run it once a day to delete all items that have been trashed more than 7 days ago, but please modify as you wish:
|
|
|
|
`crontab -e` > add `20 4 * * * trash-rm 7` - runs every day at 4:20 am
|
|
|
|
# Conclusion
|
|
|
|
It saved me multiple times, and I can recommend it. I've gotten used to using `tm` instead of `rm`, which can be annoying on systems I don't manage, but this is a small price to pay. The source code can be found [on Github](https://github.com/andreafrancia/trash-cli).
|
|
|
|
---
|