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.


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.)


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.


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']

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 .)


0

Muschel, 25

locate .DS_Store|xargs rm

Benötigt eine funktionierende locateDatenbank.


3
Erfordert auch Pfade ohne Leerzeichen.
Manatwork


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.


-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 .


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.