[X-Unix] [ANN] unmac
Stroller
macmonster at myrealbox.com
Wed Jan 7 08:27:31 PST 2009
On 7 Jan 2009, at 14:52, Eric F Crist wrote:
> ...
> Couldn't this same thing be accomplished with a shell script calling
> the find command? In that instance, ruby/etc isn't required.
>
> As an example (this could be cleaned up with a proper regex, I think):
>
> find . -name ".DS_Store" \
> -or -name ".Spotlight-V100" \
> -or -name ".fseventsd" \
> -or -name ".Trashes" \
> -or -name "__MACOSX" \
> -maxdepth 1 \
> -delete
>
> Again, just an example.
I had a crack at this a while back, and ended up when I realised how
poor my solution was.
IMO you really need to use `file` to check that the files really ARE
Mac rubbish.
EG:
FILE=/usr/bin/file
BASENAME=/bin/basename
if [[ `$FILE -b "$1"` = "data" ]] && [[ $BASSNAME =
".DS_Store" ]]
then
echo Removing "$1" >&2 # deal with .DS_Store files once
& for all
rm -f "$1"
else
if [[ `$FILE -b "$1"` = "empty" && ${BASSNAME:0:4} =
"Icon" ]]
then
echo "Removing $1" >&2 # deal with funny Icon files
rm -f "$1"
else
if [[ `$FILE -b "$1"` = "AppleDouble encoded Macintosh
file" ]]
then # file is prolly a resource-fork
if [[ $BASSNAME = "._.DS_Store" ]]
then
echo "Removing $1" >&2
rm -f "$1"
else
if [[ ${BASSNAME:0:6} = "._Icon" ]]
then
echo "Removing $1" >&2
rm -f "$1"
...
At the time I was unaware that bash sported functions, so worked
around this by having the script call itself recursively and behave
differently depending whether it was called with a directory or file
for an argument. I gave up when I realised how horrible this was, the
script having spawned a zillion children of itself <shame>.
Although I would love someone else to address this problem, I too
would be a little reluctant to use a solution that depended upon Ruby,
just because I don't know anything about the language. I just really
like Bash for this sort of thing, just because it's everywhere.
Stroller.
More information about the X-Unix
mailing list