trash.sh
March 19, 2025 · View on GitHub
trash.sh
trash.sh is a script that serves as a safe alternative to rm, allowing for secure handling of files and directories by moving them to a trash bin instead of permanently deleting them.
If you use trash.sh as described below, rm essentially becomes mv. trash.sh handles moving items to the trash for you, so please be aware of this change!
Installation
- Download the
trash.shfile to your user directory:
wget https://raw.githubusercontent.com/qqAys/trash.sh/main/trash.sh -O ~/trash.sh
- Add execute permissions:
chmod +x ~/trash.sh
- Add an alias (doesn't have to be
rm) to your.bashrcor.zshrc:
echo 'alias rm="~/trash.sh"' >> ~/.bashrc
source ~/.bashrc
Usage
"Deleting" Files or Directories
To move files or directories to the trash, use the rm command as usual:
rm file1 file2 directory1
You will receive a confirmation prompt before "deletion."
Emptying the Trash
Emptying the trash involves calling /bin/rm with the -rf parameter to clear the ~/.trash folder. This action is irreversible.
To empty the trash, use the -c parameter:
rm -c
You will be prompted to confirm the emptying of the trash, and its contents will be displayed before deletion.
Trash Structure
Files you "delete" will be renamed with the current timestamp and moved (mv) to the ~/.trash folder. If you "delete" a directory, its contents will not be renamed. The structure of the trash looks like this:
$ tree .trash/
.trash/
├── test_dir_1-2024-06-18_09-10-12
│ └── test_file.txt
├── test_file_1.txt-2024-06-18_09-10-12
└── test_file_2.txt-2024-06-18_09-10-12
1 directory, 3 files
Note ⚠️
Using trash.sh does not guarantee that data or files will be securely "deleted." You should still back up important data to ensure its safety.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Please submit a pull request or open an issue to discuss your ideas.