Automatically deleting old files from recycling bin while keeping the new ones?
I want an explorer add-on which will delete old files from recycling bin after a time period.
For example, I want to set the time limit to 30 days. When I delete a file in Windows, the software will keep a record of its delete-time. Every day, it will scan for deleted file whose age has reached to 30 days, and delete if there is any.
Is there any software like this?
RecycleBinEx is a simple application for Windows that does exactly what you ask. See: http://www.fcleaner.com/recyclebinex
On Mac OSX, Hazel does the same thing (among the others): http://www.noodlesoft.com/
KDE Plasma ships this feature as default, so if you're running Kubuntu, Arch, Chackra Linux or any other distro with KDE, you already have this feature. Just look at Dolphin configuration window.
On Ubuntu Unity, Gnome or any other gnu/linux desktop environment providing a standard FreeDesktop.org Trash feature you can use AutoTrash to do this thing: http://www.logfish.net/pr/autotrash/
Similar behaviour can be accomplished also with trash-cli, that could be used also to send files to trash can right from the command line. See: https://github.com/andreafrancia/trash-cli
Most email apps out there also have this feature for their "trash can".
On Android there isn't any "trash can" by default (when you delete it, it's gone forever), but you can install apps like Dumpster to (somehow) get similar features: http://www.dumpsterapp.mobi/
As said above, I think that automatically removing old files from trash can is a great feature to make it more usable, since it reduces clutter (are those files you trashed 3 months ago still relevant to you? And ALL those old revisions of the same file?) and makes easier to find what you want to recover (this is the reason for having a "trash can" on our computers, after all), still being safe.
It's even more useful if you work a lot with text files (code or prose), that most of the time are small and don't need a lot of space (so may never reach your trash can quota). This way you won't even need to periodically "empty your trash can". You just know that you have a window of time for recovering your "trashed" files if you need to.
Looking at most cloud services out there (Dropbox, Google Drive, Simplenote, ...), most of them seem to have a similar policy for deleted files. I really think it's the right thing to do with your files, and they seems to think so.
I don't know of any Explorer add-ons, but like most things in Windows, this can be done with PowerShell:
ForEach ($Drive in Get-PSDrive -PSProvider FileSystem) {
$Path = $Drive.Name + ':\$Recycle.Bin'
Get-ChildItem $Path -Force -Recurse -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item -Recurse
}
Save this script as a text file with a .ps1
extension. You can then use Task Scheduler to run this at regular intervals.
First, though, you need to permit the execution of PowerShell scripts, because by default you can only execute commands typed directly into the PowerShell prompt. To do this, open PowerShell and type in the following command:
Set-ExecutionPolicy RemoteSigned
Type in "y" or "yes" when prompted. See Get-Help Set-ExecutionPolicy
for more information.
Now open Task Scheduler and create a new task with the following parameters:
- Under the "General" tab, enter a name and check the "Run with highest privileges" option
- Under the "Triggers" tab, add a new trigger and set the task to run daily
- Under the "Actions" tab, add a new action:
- leave the type as "Start a program"
- set the "Program/script" field to
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
- set the "Add arguments" field to
-NonInteractive -File "C:\path\to\script.ps1"
- Under the "Conditions" tab, uncheck "Start the task only if the computer is on AC power"
Line-by-line explanation of the script:
ForEach ($Drive in Get-PSDrive -PSProvider FileSystem) {
This gets a list of all drives in the computer and loops through them one by one. The -PSProvider FileSystem
parameter is required to only return disk drives, because PowerShell also has pseudodrives for various other things like registry hives.
For more information, see Get-Help Get-PSDrive
and this tutorial on loop processing in PowerShell.
$Path = $Drive.Name + ':\$Recycle.Bin'
This constructs the path to the Recycle Bin folder on the current drive. Note the use of single quotes around the second part, to prevent PowerShell from interpreting $Recycle
as a variable.
Get-ChildItem $Path -Force -Recurse -ErrorAction SilentlyContinue |
This returns all files and subfolders under the given path (the one we constructed with the previous command). The -Force
parameter is needed to go into hidden and system folders, and the -Recurse
parameter makes the command recursive, ie. loop through all subdirectories as well. -ErrorAction
is a standard parameter for most PowerShell commands, and the value SilentlyContinue
makes the command ignore errors. The purpose of this is to prevent errors for drives that have been configured to delete files immediately. The |
symbol at the very end pipes the results to the next command; I split it up to several lines for better readability.
For more information, see Get-Help Get-ChildItem
.
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
This simply filters the results from the previous command and returns only those that are older than 30 days. $_
refers to the object currently being processed, and the LastWriteTime
property in this case refers to the date and time that the file was deleted. Get-Date
returns the current date.
For more information, see Get-Help Where-Object
and Get-Help Get-Date
.
Remove-Item -Recurse
This simply deletes the items passed to it by the previous command. The -Recurse
parameter automatically deletes the contents of non-empty subfolders; without it, you'd be prompted for such folders.
For more information, see Get-Help Remove-Item
.
The Windows Recycle Bin automatically deletes older files when it reaches it's maximum size: What happens when Recycle Bin uses up its allocated space?
You can control this from the properties of the Recylce Bin