When an OS X client accesses a network volume, especially in windows, the file .DS_STORE is deposited in the directory. This file is best suited locally for the OSX client but has no use to the Windows clients and therefore not desired.
For completion of the issue, the .DS_STORE file holds, mostly, cosmetic attributes for Finder some of these are windows position, icon position, view style, background image, and view style.
As a result the following solution below prevents this file from being created:
- Open up an OS X terminal and issue the command
- defaults write com.apple.desktopservices DSDontWriteNetworkStores true
- Reboot the system for the change to take effect.
This solves the crumbs the OSX client may leaves on disparate systems network volumes and the side effect is no one cares that you were there, just that you didn't leave files that are useless to them
Also, when zipping a directory from your client and sending it off to whomever, you may want to sanitize the files and not include the .DS_STORE.
Below is a quick solution, not from the OS X Terminal:
'find . -name ".DS_Store" -type f -print0 | xargs -0 rm'
Simply this removes all ".DS_STORE" at the directory level and down, recursively through the sub-directories. Than simply archive the directory. You can turn this into an alias if you like.
If you rather create a zip file from the get go a little grep and awk will work just the same as written below:
zip -d TARGETZIPFILE.zip `unzip -l TARGETZIPFILE.zip | grep .DS_Store | awk '{print $4}'`
You could set this up as an alias, but may consider a function for further options if you like. Instead of inserting (the Hard Coded) ".DS_STORE" you could make this a command line parameter (Hence, this is why a function should be used).
This may not fall under the same criteria, however, since I use DIFF a lot from the command line here is a function I use to remove unwanted files ".DS_STORE" from my directory compares (I use this for svn):
diff -rq DIR1 DIR2 | grep -v -e '.DS_Store' -e 'Thumbs' -e '.svn' | sort; }
Creating a function here to pass the directory names $1 compared to $2 the sdiff function is below:
function sdiff { diff -rq $1 $2 | grep -v -e '.DS_Store' -e 'Thumbs' -e '.svn' | sort; }
Note I do not create an alias as this requires passing parameters, the directory names and aliases cant take these parameters. Implementation is resorted to a shell function.
To further customize this one could create a function that takes command line options for the two directories as above. Additional, including the ability to include any number of file names one would like to exclude as additional parameters. Creating a loop to traverse the command line parameters to issue an -e $3, -e $4, .... -e $n and then append | sort;
I leave this as an exercise for you.
Enjoy!
sos
tags: osx crumbs ds_store
links: digg this del.icio.us technorati reddit