For a while I've tolerated files named
Icon? that appear in my console
git status output on macOS as well as in some IDE file trees like in Atom:
$ \ls -Al total 696 -rw------- 1 micahsmith staff 179 Nov 12 2019 Experiment Datasets.gsheet -rw-r--r--@ 1 micahsmith staff 0 Nov 2 2018 Icon? -rw------- 1 micahsmith staff 179 Aug 19 2018 test_20180818193120513976.gsheet -rw------- 1 micahsmith staff 179 Nov 12 2019 test_20180818193120513976_v1.gsheet
Why does the file
Icon? appear and what is responsible for creating it? There is a nice discussion I found on superuser. The short answer is that in my case, the Google Drive desktop client ("Backup and Sync") for MacOS takes advantage of built-in Finder functionality to use a special icon for folders that are shared in Drive. The file that appears as
Icon? is actually a "hidden file" with the icon image itself stored in a non-empty "resource fork".
Though the Superuser answer does not expand on this, the reason the literal carriage return character appears as a
? is because the default behavior of
ls is equivalent to
ls -q which sets:
Force printing of non-graphic characters in file names as the character '?'
I don't care about these details and I appreciate the integration with Drive, Dropbox, etc. with Finder. But I don't want these to show up in my console output.
Icon? files in
Add to your global gitignore in
Gitignore uses fnmatch syntax1, so to match a literal carriage return character it can be enclosed within square brackets. To enter the literal carriage return character into Vim, for example, I use Ctrl k C R (see
:help digraphs and
:help digraph-table) which then appears as
If you entered the literal
Icon? into a
.gitignore file, it would also hide this file, but only by accident, because the
? pattern matches any character, so the pattern would also match
Iconz for example.
Icon? files in
I couldn't figure out how to do this easily from
man ls by modifying any
ls aliases I have. But I decided that I can tolerate this as long as it does not show up in in
git status output. Let me know if you figure out a good way to do this!