Icon? file on OS X desktop
When I ls
my Desktop from terminal (by using ls ~/Desktop
), I see a file named Icon?
. As far as I can tell, it's empty (nano Icon?
shows nothing). It doesn't show up on my actual Desktop, and open Icon?
shows the Finder alert
This item is used by Mac OS X and can't be opened
Here is the output from mdls Icon?
:
kMDItemContentType = ""
kMDItemFSContentChangeDate = 2009-09-23 13:32:52 -0600
kMDItemFSCreationDate = 2009-09-20 07:27:46 -0600
kMDItemFSCreatorCode = "MACS"
kMDItemFSFinderFlags = 16384
kMDItemFSHasCustomIcon = 0
kMDItemFSInvisible = 1
kMDItemFSIsExtensionHidden = 0
kMDItemFSIsStationery = 0
kMDItemFSLabel = 0
kMDItemFSName = "Icon "
kMDItemFSNodeCount = 0
kMDItemFSOwnerGroupID = 20
kMDItemFSOwnerUserID = 501
kMDItemFSSize = 0
kMDItemFSTypeCode = "icon"
Does anyone have an idea as to what this is?
What is it?
It's name is actually Icon\r
, with \r
being the carriage return 0x0D
. If letting the shell autocomplete the path in Terminal, it yields Icon^M
, ^M
being \r
.
Icon^M
is a file existing in all directories that have a custom icon in Finder. If you change a directory's icon e.g. in its Get Info dialog by pasting an image into the icon in the upper left corner, the Icon^M
file is created.
Changing a volume's icon creates a hidden .VolumeIcon.icns
file instead.
Why is it invisible?
It's invisible in Finder, because its hidden
attribute is set.
$ ls -lO Icon^M
-rw-r--r--@ 1 danielbeck staff hidden 0 24 Apr 23:29 Icon?
Change with chflags nohidden Icon^M
.
Where is its data?
While the file's data fork (i.e. content) is empty (i.e. a file size of 0 bytes in Terminal), the actual icon data is stored in the file's resource fork.
$ ls -l@ Icon^M
com.apple.ResourceFork 350895
You can copy the resource fork to a file (to view e.g. in a hex editor) like this:
$ cp Icon^M/..namedfork/rsrc Icondata
How can I view it?
The easiest way to get the image is to copy the icon from the Get Info dialog of the folder it's contained in into the clipboard, and then create a new image from clipboard in Preview (Cmd-N
). It's an icns
image then by default.
Its format is icns, encoded as an icon resource with derez. If you open it in a hex editor and remove the first 260 bytes (so the file begins with the icns
magic byte-string), you can open it in Preview.app. Alternatively you can open it with XnView
An Icon?
file inside a directory contains a custom icon image for that directory. The image itself is stored inside an extended file attribute, specifically, com.apple.ResourceFork
, which is why the Icon?
file appears to have no length.
You can retrieve that data with $ xattr -p com.apple.ResourceFork Icon?
or view all extended attributes with $ xattr -l Icon?
On Snow Leopard, at least, they appear to have been phased out for system icons (In the case of ~/Desktop/, that icon would be visible when viewing your home directory in icon view.) but for the two custom directory icons I have on my system, it still exists.
What is it?
It is the file that stores the Image for your Folder Icon, I was only able to get this to be created if I manually loaded an image to the folder. I don't have these on my system by default.
How To Find the Icon^M files
NOTE:
This is not the same as .icns
file extension.
Should you be paranoid about if finding a false positive then use:ctrl+v ctrl+m instead of ?
#!/bin/bash
# =============================================================================
# MAC OSX HIGH SIERRA 10.13.4 (17E199)
# Terminal: Version: 2.8.2 64-Bit (Intel): Yes
# Terminal Location: /Applications/Utilities/Terminal.app
# =============================================================================
echo 'Searching Documents for Icon files...'
find ~/Documents -type f -name 'Icon?' -print;
How To Create the Icon^M file
- Open Finder
- Right Click On a Folder
- Press & Hold Option on your keyboard
- Select Show Inspector
- Drag an image to the top left folder icon.
- Run
ls -lah
on that directory- You should see:
-rw-r--r--@ 1 username staff 0B May 13 22:23 Icon?
- You should see:
How Remove the Icon^M file
Should you need to remove it for any reason... say accidentally on purpose testing it.
#!/bin/bash
# =============================================================================
# MAC OSX HIGH SIERRA 10.13.4 (17E199)
# Terminal: Version: 2.8.2 64-Bit (Intel): Yes
# Terminal Location: /Applications/Utilities/Terminal.app
# =============================================================================
echo 'Removing Icon files from Documents...'
find ~/Documents -type f -name 'Icon?' -print -delete;
Reference from my post on another question:
How can I delete empty folders in Mac OS X?
The Icon^M file is a hidden macOS system file that manages a custom image for the containing folder. However, users may find these files created for other reasons.
For example, the macOS version of Google Drive would create an Icon file in every folder in order to track sync status.
You may safely delete these files. While in Terminal, from the parent directory, run the following command: (be sure to insert the ^M with the ctrl-v, ctrl-m keystrokes):
find . -type f -name 'Icon^M' -exec rm -f {} \;