Downloads is where everything arrives and nothing ever leaves. This guide covers both ways: by hand with the tools already on your Mac, and automatically. The first costs nothing but time. The second not even that.
Every download lands here, and nothing ever leaves on its own. Installers stay after the app is installed. Invoices and tickets stay after they have been read. Two years in there are several thousand files, and because you can no longer find anything, you stop looking and download it again instead.
The problem is not the disk space. It is the handful of files you genuinely still need, disappearing among the rest.
Open Downloads in Finder and switch to list view (⌘2). Click the Date Added column to sort by date. If you cannot see that column, right-click any column heading and tick it.
The oldest files now sit together. Anything older than a year whose name you do not recognise can almost always go to the Trash. Then sort by Size — that is where the disk images and archives are, the ones actually taking up room.
A second useful move: sort by Date Last Opened instead. A file you have never opened since downloading it was probably never needed.
Invoices, contracts, tax documents. Warranty periods run for years, and a receipt you threw away is a receipt you cannot produce. File them away rather than throwing them out.
Licence keys and purchase confirmations. Often an unremarkable text file or PDF that becomes very valuable the day you set up a new machine.
Files an app still needs. Some programs keep their data next to themselves. Delete a disk image an app is still running from, and the app goes with it.
Duplicates appear almost by themselves: you download the same file twice, macOS appends a number, and now invoice.pdf and invoice-2.pdf sit side by side. Searching by name only finds them when the names are similar, and often they are not.
The only reliable method is comparing contents. In Terminal, for the Downloads folder:
cd ~/Downloads
find . -type f -exec md5 -r {} + | sort |
awk '{n[$1]++; z[$1]=z[$1] $0 "\n"} END {for (h in n) if (n[h]>1) printf "%s", z[h]}'The command only lists, it changes nothing. Consecutive lines sharing a checksum are byte-for-byte identical, whatever they are called. Decide per group which one stays, and check what you are pointing at first.
By hand this is twenty minutes of work. The problem is that in three months it looks the same again.
That is what FILYXA is built for. It reads one folder you grant it and proposes a destination for every file - by type, by age, by where it came from, and by whether a byte-for-byte identical copy already exists. Every row states its reason. Only what you tick gets moved, nothing is ever deleted, and every run can be undone in one click.
It is free, with no subscription and no in-app purchases.