Mac User: mac-typische Dateien entfernen

Wir wissen ja alle, dass der DFPlayer ziemlich zickig ist und es überhaupt nicht mag, wenn „komische“ Dateien auf der SD-Karte sind. Das ist beim Mac typischerweise die .DS-Store Datei zb.

Man kann das nun via Terminal lösen und die Dateien entfernen oder wie ich mit einem kostenlosen Zusatztool

CleanMyDrive von MacPaw

7 „Gefällt mir“

Ich mache das mit einem kleinen Skript:

#!/bin/bash
for i in NOAH CLARA ; do
	if [[ -d /Volumes/$i ]] ; then
		rsync -av --delete --progress --size-only --exclude '.DS_Store' --exclude '.Spotlight-V100' --exclude '.fseventsd' --exclude '.Trashes' --exclude '._*' $HOME/tonuino/sdkarte_$i/ /Volumes/$i/
		find /Volumes/$i -name ".DS_Store" -exec rm -rf {} \; >/dev/null 2>&1
		find /Volumes/$i -name ".Spotlight-V100" -exec rm -rf {} \; >/dev/null 2>&1
		find /Volumes/$i -name ".fseventsd" -exec rm -rf {} \; >/dev/null 2>&1
		find /Volumes/$i -name ".Trashes" -exec rm -rf {} \; >/dev/null 2>&1
		find /Volumes/$i -name "._*" -exec rm -rf {} \; >/dev/null 2>&1
		sudo diskutil eject /Volumes/$i/
	fi
done

In meinem HOME gibt es ein Verzeichnis namens “tonuino”, darin dann “sdkarte_CLARA” und “sdkarte_NOAH” die jeweils den exakten Inhalt der SD-Karte haben, also mit mp3 und advert Verzeichnis. Die SD-Karten müssen ebenso benannt sein, damit sie unter dem Namen unter /Volumes/ eingebunden werden.

Aufgrund der Unzulänglichkeiten des FAT32-Dateisystems gegenüber APFS oder extX läuft rsync mit der “–size-only” Option, ansonsten würde es jedesmal alle Dateien kopieren. Würde scheitern wenn man den Inhalt einer Datei ändert und die Datei nachher die exakt gleiche Grösse hat, aber das halte ich für unwahrscheinlich genug.

1 „Gefällt mir“

Nettes Script. Die 3 finds könnte auch dot_clean ersetzen. Nutze ich so, bisher keine Probleme. Am besten man trägt alles 4 ein hehe.

Grundsätzlich richtig, dot_clean macht bei mir aber gar nix, weiss nicht woran’s liegt. Mir ist lieber ich weiss was passiert, schlecht gebastelte Tools (in dem Fall der Finder) sind schon die Ursache für die Probleme, da will ich keinem anderen potentiell schlecht gebastelten Tool die Lösung überlassen.

Habe den obigen Code noch um .Trashes ergänzt, wenn man auf der Karte was löscht bleibt das über.

Ich muss mich auch etwas korrigieren: Ich habe nochmal die man page gelesen. Deine Beobachtung ist völlig korrekt. dot_clean löscht nämlich gar nicht .DS_Store, .Spotlight-V100, .fseventsd & .Trashes sondern die ._* files (falls vorhanden):

For each dir, dot_clean recursively merges all ._* files with their corresponding native files according to the rules specified with the given arguments. By default, if there is an attribute on the native file that is also present in the ._ file, the most recent attribute will be used.

Und diese „ghost“ Dateien wären es ja auch, die den DFPlayer Mini aus dem Tritt bringen. Weil es eben weitere .mp3 Files gibt die keine sind.

Es schadet also nicht, das mit aufzunehmen - alleiniger Einsatz bringt aber nichts weil die von dir genannten Files eben erhalten bleiben würden. Und die will man ja mit weg haben.

Du könntest in den rsync Befehl direkt –exclude einbauen, dann werden die Dateien nicht jedes Mal wieder auf die SD-Karte gesynct.

rsync ... --exclude '.DS_Store' --exclude '.Spotlight-V100' --exclude '.fseventsd' --exclude '.Trashes'

Stefan: das erklärt einiges. Weiss nicht woran es liegt (Mac OS Version?), aber ich habe in meinem gesamten Homeverzeichnis keine Datei ._*. Habe noch einen find eingebaut für ._* .

Marco: grundsätzlich ja, das behandelt dann aber nicht die Dateien die auf der SD-Karte angelegt werden wenn man sie mal mit dem Finder öffnet. Ginge wahrscheinlich mit –delete-excluded.

Ich habe keine Ahnung wo die Dateien herkommen und unter welche Umständen sie erzeugt werden. Aber gut das das nun mit einbezogen wird. :ok_hand:t2: Werde mir das Script auch in mein $home legen.

Ja was das Mac OS so alles im Hintergrund macht oder auch nicht… ich weiss nicht warum das nicht in einer Datenbank steht die dem Nutzer nicht auf den S**k geht.

Anyway, habe die Excludes aus Marcos Vorschlag auch noch eingebaut, spart ein paar Schreibzyklen auf der Karte.

Eigentlich könnte man doch einfach alle versteckten Dateien von der Karte löschen, oder? Also einfach
find /Volumes/$i -name ".*" -exec rm -rf {} \; >/dev/null 2>&1

Ich habe das ganze jetzt mit dem macOS Programm “Skript Editor” als Apple Script geschrieben und dann als Programm abgespeichert. Wenn ich jetzt die SD-Karte einstecke muss ich lediglich das Programm starten und die gesamte Prozedur läuft automatisch. Der Fortschritt wird in einem kleinen Fenster angezeigt und am Ende kommt eine Erfolgsmeldung sowie ein Ton (falls alles gut ging). Im Skript muss man lediglich noch in Zeile 1 den Namen der SD Karte anpassen.

set sdname to "SD_MARCO"
set n to 2
set progress total steps to n
repeat with i from 1 to n
if i = 1 then
	set progress description to "Synchronisiere TonUINO..."
    do shell script "rsync -rtvW --progress --ignore-existing --omit-dir-times --size-only --exclude '.*' $HOME/tonuino/" & sdname & "/ /Volumes/" & sdname & "/"
	set progress completed steps to i
	delay 1
end if
if i = 2 then
	set progress description to "Entferne unerwünschte Dateien..."
	try
		do shell script "find /Volumes/" & sdname & " -name '.DS_Store' -exec rm -rf {} \\; >/dev/null 2>&1"
		do shell script "find /Volumes/" & sdname & " -name '.Spotlight-V100' -exec rm -rf {} \\; >/dev/null 2>&1"
		do shell script "find /Volumes/" & sdname & " -name '.fseventsd' -exec rm -rf {} \\; >/dev/null 2>&1"
		do shell script "find /Volumes/" & sdname & " -name '.Trashes' -exec rm -rf {} \\; >/dev/null 2>&1"
		do shell script "find /Volumes/" & sdname & " -name '._*' -exec rm -rf {} \\; >/dev/null 2>&1"
	end try
	set progress completed steps to i
	delay 1
end if
end repeat
delay 1
do shell script "/usr/sbin/diskutil unmount force /Volumes/" & sdname
display notification "Deine TonUINO Hörspiele wurden erfolgreich aktualisiert!" with title "Fertig!" sound name "default"
7 „Gefällt mir“

So viel Mac :heart: hier… :grinning:

Und deswegen das Tool: klicken, fertig :wink:

Die .DS_Store Datei speichert zB die Fensterposition

Das ist klar. Ich meinte diese double Files ._*

Ist aber auch Wurscht, wir wollen die auf der player Karte nicht haben. :grimacing:

Danke marco79 für das tolle Skript. Hatte mir schon Gedanken gemacht wie ich das am MAC mache.

1 „Gefällt mir“
#!/bin/bash
for i in NOAH CLARA ; do
	if [[ -d /Volumes/$i ]] ; then
		rsync -av --delete --progress --size-only --exclude '.*' $HOME/tonuino/sdkarte_$i/ /Volumes/$i/
		find /Volumes/$i -name ".*" -exec rm -rf {} \; >/dev/null 2>&1
		sudo diskutil eject /Volumes/$i/
	fi
done

Das ist meine aktuelle recht kompakte Version.

1 „Gefällt mir“

Interessanter Weise habe ich bislang keine Probleme mit den zusätzlichen Dateien, die der Mac hinterlässt gehabt. Ist es möglich, dass mein Player damit kein Problem hat oder habe ich bislang nur Glück gehabt?

Ich dachte als Windows-User bin ich von den zusätzlichen Mac-Dateien nicht betroffen.
Jetzt habe ich aber mal die verstecken Dateien anzeigen lassen und siehe da:

versteckte_dateien

Diesen “Found”-Ordner habe ich jetzt mal gelöscht, sieht aus wie wiederhergestellte Files.
Die “System Volume Information” habe ich mich nicht getraut.
Kennt sich jemand mit Dateisystemen aus?

Bisher hatte ich allerdings auch keine Probleme.

Immer wenn Windows meint, dein Stick /sdcard/etc ist kaputt und möchte diesen reparieren und du da “ja” klickst scannt er und hinterlässt diesen Ordner. Sinniges zeug hab ich da aber noch nie drin gefunden. Löschen ist ok.
Die Systems Datei in Ruhe lassen. Kannst du glaub eh nicht löschen.

1 „Gefällt mir“