"dotted files" bereinigen auf linux fileserver

[ geschrieben am 07.10.2011 in blog: der maschinist | tags: #, #, #, #, #, #, # ]

wer mit einem linux fileservices in heterogenen systemumgebungen anbietet, stolpert unweigerlich über automatisch generierte sogenannte „dotted files“ seiner mac os x clients. jeder ordner erhält eine datei „.DS_Store“, zu jedem geöffneten file „DATEI.EXT“ entsteht eine „._DATEI.EXT“-entsprechung.

problematisch wird das ganze genau in dem moment, wo solche (versteckten) files das löschen eines per samba oder ftp-dienst angebotenen ordners verhindern. als versteckte dateien werden sie nicht angezeigt, der ordner ist jedoch nicht leer und kann daher nicht gelöscht werden.

hinzu kommt die nette eigenschaft von mac os x, leerzeichen am ende von ordner- und dateinamen zu erlauben, was jedem administrator eines gemischten netzwerkes von windows- und osx-clients schon negativ aufgefallen sein wird.

auf dem linux server kann man sich mit dem kommando find behelfen. ein cronjob, der in regelmäßigen abständen (z.b. vor dem backuplauf) alle „.DS_Store“ und „._*.*“ löscht, hält z.b. das backup sauber.

hierzu habe ich die notwendigen kommandos in einem kleines script gesammelt…

#!/bin/bash
# cleanup_osxfiles

NORM="33[0m"
BOLD="33[1m"

if [ $1 ]; then
    if [ $2 ]; then
        echo -e "nWorking on destination folder "$2" ...n"
        if [ ! -d "$2" ]; then
                echo -e "ERROR: The destination folder you typed in does not appear to exist.n"
                exit 1
        fi
    else
        echo -e "nERROR: Please put in a folder name to be checked.n"
        exit 1
    fi
fi

case "$1" in
    showds)
        find $2 -name ".DS_Store" -exec echo '{}' ;
    ;;
    delds)
        find $2 -name ".DS_Store" -exec rm '{}' ;
    ;;
    showosxdots)
        find $2 -iname "._*" -print
    ;;
    delosxdots)
        find $2 -iname "._*" -delete
    ;;
    showendspace)
        find $2 -iname "* " -print
    ;;
    *)
        echo -e "n-------------------------------------------------------------"
        echo "Usage: $0 parameter folder"
        echo -e "nValid parameters are..."
        echo -e " ${BOLD}showds${NORM}"
        echo "  This shows all files with the name ".DS_Store""
        echo "  in the current folder and ints subs..."
        echo -e " ${BOLD}delds${NORM}"
        echo "  This deletes all files with the name ".DS_Store""
        echo "  in the current folder and ints subs..."
        echo -e " ${BOLD}showosxdots${NORM}"
        echo "  This shows all files in the current folder and ints subs"
        echo "  starting with "._" in the filename..."
        echo -e " ${BOLD}delosxdots${NORM}"
        echo "  This deletes all files in the current folder and ints subs"
        echo "  starting with "._" in the filename..."
        echo -e " ${BOLD}showendspace${NORM}"
        echo "  This shows all files and folders containing a space sign"
        echo "  at the end of their name. They should be renamed..."
        echo "-------------------------------------------------------------"
    ;;
esac

echo

 
Ein kleiner Test:

root@server:~# ./cleanup_osxfiles showds /home

Working on destination folder "/home" ...

/home/meszi/OSX-Ordner1/.DS_Store

root@server:~#

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.