Mac User: mac-typische Dateien entfernen


#1

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


#2

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.


#3

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.


#4

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.


#5

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.


#6

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'


#7

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.


#8

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.


#9

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.


#10

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


#11

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"

#12

So viel Mac :heart: hier… :grinning:


#13

Und deswegen das Tool: klicken, fertig :wink:


#14

Die .DS_Store Datei speichert zB die Fensterposition


#15

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

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


#16

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


#17
#!/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.