Interesting, emptying the trash always does so successfully for my USB drives. My only complaint about it is that often I'd like to only empty the trash on my USB drive and not have to do so for every drive on the system.
–
Matthew FrederickJan 16 '11 at 0:34

5 Answers
5

It's possible that the files are in some other user's trash. The .Trashes folder at the top of each volume has subfolders for each different user, by user ID number (e.g. user #501's trash is in .Trashes/501). You can delete everyone's trash by deleting the entire .Trashes folder with sudo rm -R /Volumes/volumaname/.Trashes (warning: as with anything involving "rm -R", use this carefully; if you type it wrong, it could have ... unpleasant consequences).

The "might be in someone else's Trash" is exactly the issue I was running into. This should be better advertised!
–
cdeszaqNov 11 '12 at 16:28

Adding the -f switch to the command will force the action. Substituting the "volumename" with "*" would allow you to connect multiple USB drives and empty all the Trash on all of them simultaneously. Don't have to connect 1-by-1 and then re-do.
–
Danijel JSep 28 '13 at 10:25

Usual behavior:
When you delete something off a USB drive, it is moved to a .trashes folder on that volume. When plugged into your computer, deleted items will appear in your trash bin with everything else.
When you unplug it, items that you've deleted from that drive will no longer show up in your trash UNTIL you plug it in again. Then, you can empty the trash. It will really delete them from that drive.

If that isn't happening for you, here's my suggestion:
Select the drive in your Finder sidebar. Without selecting anything else, press cmd-i. Use the Sharing and Permissions section of that window to set Everyone to Read and Write.

on open these_volumes
set t_id to user ID of (system info)
repeat with i in these_volumes
if (kind of (info for i without size)) is "Volume" then
set tPath to (POSIX path of i) & ".Trashes/" & t_id
do shell script "/bin/rm -Rf " & (quoted form of tPath) & "/*"
end if
end repeat
end open

Drag/Drop Volume(s) on the application.

This script removes the items from your trash (user ID) folder on the volume.
if other users use the volume this script will not delete the items from their trash folder, otherwise the script would need an administrator password to do that.

If you want to eject the volume after emptying the trash, use this script.

on open these_volumes
set t_id to user ID of (system info)
set volToEject to {}
repeat with i in these_volumes
if (kind of (info for i without size)) is "Volume" then
set tPath to (POSIX path of i) & ".Trashes/" & t_id
do shell script "/bin/rm -Rf " & (quoted form of tPath) & "/*"
set end of volToEject to contents of i
end if
end repeat
if volToEject is not {} then tell application "Finder" to eject volToEject
end open

To make the applescript work, simply drag the connected device or drive to the AppleScript application and drop. You can create an alias on the dock next to the regular trash bin for convenience, by dragging and dropping the Application icon into the side-dock.
–
Tony_kenyaFeb 17 at 13:58