There comes a time, where manual clicking through the SharePoint navigation structure gets tedious. I found myself contemplating my life when Remote Desktoped to a slow, clunky workstation just to access SharePoint online. I was removing content types with incorrect ID's, and got that annoying "This Content Type is still in use" error. At any rate, the content type was in a recycle bin, and had to be cleared at the Web and Site level. I had to repeat this process in multiple locations, and thought "Wouldn't it be nice if I could run a script to do this for me". So I built one into my office365-devscripts library I've been working on.
You won't be able to run this directly without downloading office365-devscripts on github, but with a few modifications it would work by itself.

PowerShell - Delete-RecycleBins.ps1

#Script:	Delete-RecycleBins.ps1
#Author:	Tim Wheeler (
#Version:	0.3
#Purpose:   Recurse the web structure and clear all of the Web Recycle Bins.  Then clear the Site Recycle Bin.
    $env =  $(Read-Host "Specify environment name"),
    [String] $environmentType = $(Read-Host "Specify EnvironmentType Dev,Test,UAT,Prod"),
    [switch] $confirm = $true
$InformationPreference = "continue"
Check-Environment $env $environmentType
Warn-WillUpdate $env $environmentType $confirm 
$scriptStartTime = Get-Date

$context = Create-Context $env -environmentType $environmentType

function RecurseWebs([Microsoft.SharePoint.Client.Web] $web)
    Execute-WithRetry $context
    Write-Information "Emptying Recycle Bin at $($web.Url)"
    $webs = $web.Webs
    Execute-WithRetry $context
    foreach($subWeb in $webs)
        RecurseWebs $subWeb 

    $site = $context.Site
    RecurseWebs $context.Site.RootWeb
    Write-Information "Emptying Site Recycle Bin at $($site.Url)"
    Write-Information "Script started at $scriptStartTime"
    Write-Information "Script finished at $(Get-Date)"
    Write-Information "Time taken is $(([DateTime]::Now - $scriptStartTime).ToString())"
    if($context -ne $null)
        $context = $null