Löschen Sie diese lästigen ".DS_Store" -Dateien

13

Wenn Sie OS X verwenden, sind Sie möglicherweise mit den berüchtigten versteckten ".DS_Store" -Dateien vertraut, die aufgrund der Verwendung von Finder erstellt werden.

Die Herausforderung besteht darin, Code zu schreiben, der das gesamte Dateisystem durchläuft und alle Dateien mit dem Namen ".DS_Store" löscht.

Klassisches Codegolf - der kürzeste Code gewinnt.


Erläuterungen:

  • Der Code ist nicht brauchen keine .DS_Store Dateien zu löschen , die Super - User benötigen; Es wird davon ausgegangen, dass keine solchen Dateien vorhanden sind.

  • Der Code sollte nur die relevanten .DS_Store-Dateien löschen und sonst nichts.

arshajii
quelle
3
Muss der Code .DS_Store-Dateien löschen, für die ein Superuser erforderlich ist (muss sudo aufgerufen werden)?
Kaya
1
@ Kaya Gute Frage: nein, es müssen keine solchen Dateien gelöscht werden.
Arshajii
27
Ist es in Ordnung, nicht benannte Dateien .DS_Storeauch zu löschen ?
Joey Adams
1
@JohannesKuhn Die neueste Bearbeitung hätte selbstverständlich sein müssen, würde ich annehmen. Der Vollständigkeit halber habe ich es hinzugefügt. Trotzdem schätze ich die clevere Antwort!
Arshajii
1
@Joey - Transponiere die Frage in die Militärdomäne - zum Beispiel, hmm ... das Militär der USA, nach dem Zufallsprinzip ^^. Und ersetze "Datei mit dem Namen" .DS_Store "durch" Person, die getötet werden soll ". Und Sie werden sehen, dass die Anforderung „nur“ keineswegs offensichtlich ist.
Nicolas Barbulesco

Antworten:

14

zsh, 19

rm -f /**/.DS_Store

(Machen Sie das 16, wenn es in Ordnung ist, wegzulassen -f.)

Kopieren
quelle
12

Bash *, 40 30

find / -name .DS_Store -delete

find / -name .DS_Store -exec rm -f {} \;

Dies sollte damit umgehen (nicht sehr golfen, nicht besonders langsam). Bash scheint richtig zu sein, weil wir uns mit keinem "Importsystem" -Nonsens befassen müssen. Wenn Sie die Ausführung in einer beliebigen Umgebung erfordern möchten, fügen Sie 4 Zeichen für bashund 1 für einen Zeilenvorschub hinzu.

* Jede Shell, die ich denke, kommt einfach nicht aus der Gewohnheit heraus, vorausgesetzt, die bourne again-Shell ist die einzige.

Kaya
quelle
1
Bash ist genau das richtige Werkzeug dafür.
Johannes Kuhn
1
Was für findein Betriebssystem hat OS X? Mit GNU findist noch kürzer: find / -name .DS_Store -delete.
Manatwork
1
Vorbehaltlich „Argument Liste zu lang“ Fehler und erfordert entweder bash4 oder neuer mit globstarShell - Option aktiviert ist , oder zsh: rm /**/.DS_Store.
manatwork
1
Du machst nichts Bash-spezifisches, also könnte es auch sh sein.
Peter Taylor
10
Es entfernte mein .DS_StoreVerzeichnis, in dem ich wichtige Sachen hatte.
Konrad Borowski
9

Ruby: 38 33 Zeichen

File.delete *Dir['/**/.DS_Store']
Mann bei der Arbeit
quelle
2
Dir[...]ist eine Abkürzung für Dir.glob(...), dies erspart Ihnen 5 Zeichen.
Patrick Oscity
3
Argh! Ich wusste, dass es einen kürzeren Weg gibt, aber ich habe danach gesucht Kernel. Vielen Dank, @padde.
Manatwork
2

Fisch, 16

rm /**/.DS_Store

(Stellen Sie diese 19 ein, wenn -fdas Löschen .DS_Storein schreibgeschützten Verzeichnissen erforderlich ist .)

Pierre Carrier
quelle
0

Muschel, 25

locate .DS_Store|xargs rm

Benötigt eine funktionierende locateDatenbank.

Gaelan
quelle
3
Erfordert auch Pfade ohne Leerzeichen.
Manatwork
0

Python 3 , 80 Bytes

import os
d='.DS_Store'
for r,_,f in os.walk('/'):
 if d in f:os.remove(r+'/'+d)

Probieren Sie es online!

Auf keinen Fall wettbewerbsfähig, sondern nur der Sache zuliebe :)

movatica
quelle
0

CMD, 17

del/s "/.DS_Store

Ziemlich einfach.

/swird auch für die Suche in Unterverzeichnissen benötigt.
"wird verwendet, um dem /Zeichen zu entgehen, das andernfalls als (ungültiges) Argument interpretiert würde.


quelle
-1

finde, 38

Die vorherige findLösung ist einfach falsch: Es ist gemeint, alles zu löschen, .DS_Storeeinschließlich Verzeichnis, Links, Spezialdatei usw.

Aber:

find / -type f -name .DS_Store -delete

es ist die minimale Lösung mit find.

HAFTUNGSAUSSCHLUSS : Ich rate dringend davon ab, diese Lösung wirklich auf einer echten * nix-Box zu verwenden: Es /ist eine sehr schlechte Idee, etwas rekursiv von zu löschen . Sie werden gewarnt.

EDIT :

Wenn Ihnen die Unterschiede zwischen Dateien, Verzeichnissen, Verknüpfungen (fest und symbolisch), Named Pipes, Sockets, Spezialdateien und Pseudodateisystemen nicht klar sind, empfehle ich, einige dieser unbekannten Begriffe zu googeln. Sie werden überrascht, weiser und weniger anfällig für (katstrofische) Fehler sein.

EDIT2 : Noch relevanter: Das OP schrieb: "Der Code sollte nur die relevanten .DS_Store-Dateien löschen und sonst nichts." : Also, wenn jemand die langweiligen Anforderungen lesen möchte , sind alle Lösungen, die mehr als diese Dateien entfernen, witzig, klug, ect. aber falsch .

DavAlPi
quelle
Die vorherige findLösung ist korrekt. Die Frage lautet "Alle Dateien mit dem Namen" .DS_Store "löschen". Also keine besonderen Anforderungen basierend auf dem Dateityp.
Manatwork
@ manatwork: Unsinn: Eine Datei ist etwas anderes als ein Verzeichnis. Entlang Ihrer verdrehten Linie, ist die beste Lösung noch rm -rf /
DavAlPi
2
Ohh, Sie haben nicht google: en.wikipedia.org/wiki/Everything_is_a_file
Johannes Kuhn
3
Ohh, und noch etwas: Beim Codegolf geht es darum, die kürzeste Lösung zu finden. Wenn Sie also ein paar Zeichen einsparen können, indem Sie die Anforderungen zu Ihren Gunsten festlegen, sollten Sie es auch tun. Sie könnten 8 Zeichen sparen, indem Sie alles wie eine Datei behandeln, wie es Unix tut. PS: Wo war die Überraschung? Die Tatsache, dass einige Leute das grundlegende UNIX-Prinzip leugnen?
Johannes Kuhn
1
Jetzt habe ich eine bessere Antwort , die jeder hier verstehen kann.
DavAlPi