Elimina quei fastidiosi file ".DS_Store"


13

Se usi OS X, potresti avere familiarità con i famigerati file ".DS_Store" nascosti che vengono prodotti a seguito dell'utilizzo di Finder.

La sfida è scrivere codice che attraversi l'intero file system ed elimini qualsiasi file chiamato ".DS_Store".

Golf classico: vince il codice più corto.


chiarimenti:

  • Il codice non deve eliminare alcun file .DS_Store che richiede superutente; supponiamo che non esistano tali file.

  • Il codice dovrebbe eliminare solo i file .DS_Store pertinenti e nient'altro.


3
Il codice deve eliminare i file .DS_Store che richiedono un superutente (devo invocare sudo)?
Kaya,

1
@Kaya Buona domanda: no non è necessario eliminare tali file.
arshajii,

27
Va bene per eliminare i file non citate .DS_Storeanche ?
Joey Adams,

1
@JohannesKuhn L'ultima modifica avrebbe dovuto essere evidente, suppongo. L'ho aggiunto per completezza. Ma apprezzo la risposta intelligente, comunque!
Arshajii,

1
@Joey - Trasponi la domanda nel dominio militare - ad esempio, hmm ... i militari degli Stati Uniti, a caso ^^. E sostituisci "file denominato" .DS_Store "" con "persona da uccidere". E vedrai che il requisito "solo" è lungi dall'essere evidente.
Nicolas Barbulesco,

Risposte:


14

zsh, 19

rm -f /**/.DS_Store

(Fallo 16 se va bene lasciarlo fuori -f.)


12

Bash *, 40 30

find / -name .DS_Store -delete

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

Questo dovrebbe gestirlo (non molto giocoso, no. A. Meravigliosamente lento). Bash sembra giusto perché non abbiamo a che fare con nessuna assurdità del "sistema di importazione". Se desideri richiedere l'esecuzione in qualsiasi ambiente, aggiungi 4 caratteri per bashe 1 per un feed di riga.

* qualsiasi shell immagino, semplicemente non riesco a uscire dall'abitudine supponendo che la Bourne di nuovo shell sia l'unica.


1
Bash è esattamente lo strumento giusto per quello.
Johannes Kuhn,

1
Che tipo di findOS X ha? Con GNU findè ancora più breve: find / -name .DS_Store -delete.
arte

1
Con riserva di “Lista argomento troppo lungo” l'errore e richiede sia bash4 o più recente con globstaropzione di shell acceso, oppure zsh: rm /**/.DS_Store.
arte

1
Non stai facendo nulla di specifico per la bash, quindi potrebbe anche essere sh.
Peter Taylor,

10
Ha rimosso la mia .DS_Storedirectory dove avevo cose importanti.
Konrad Borowski,

9

Rubino: 38 33 caratteri

File.delete *Dir['/**/.DS_Store']

2
Dir[...]è una scorciatoia per Dir.glob(...), questo ti farà risparmiare 5 caratteri.
Patrick Oscity,

3
Argh! Sapevo che esiste un modo più breve, ma l'ho cercato Kernel. Grazie, @padde.
arte

2

pesce, 16

rm /**/.DS_Store

(Rendi 19 se -fè necessario eliminare .DS_Storenelle directory di sola lettura.)


0

Shell, 25

locate .DS_Store|xargs rm

Richiede un locatedatabase funzionante .


3
Richiede anche percorsi senza caratteri di spazi bianchi.
arte

0

Python 3 , 80 byte

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

Provalo online!

Non è affatto competitivo, ma solo per il gusto di farlo :)


0

CMD, 17

del/s "/.DS_Store

Abbastanza diretto.

/sè richiesto anche per la ricerca all'interno delle sottodirectory.
"viene utilizzato per sfuggire al /carattere che altrimenti verrebbe interpretato come argomento (non valido).


-1

trovare, 38

La findsoluzione precedente è semplicemente sbagliata: significa eliminare tutto ciò che ha nome, .DS_Storeinclusi directory, collegamenti, file speciali ecc.

Ma:

find / -type f -name .DS_Store -delete

è la soluzione minima che utilizza find.

DISCLAMER : Consiglio vivamente di non utilizzare davvero questa soluzione su una vera * nix box: provare a eliminare qualcosa in modo ricorsivo /è una pessima idea. Sei avvisato

MODIFICA :

Se le differenze tra file, directory, collegamenti (hard e simbolici), named pipe, socket, file speciali, sistemi pseudo-file non ti sono chiare, ti suggerisco di google alcuni di questi termini sconosciuti. Sarai sorpresa, più saggio e meno soggetto a errori (catstrofic).

EDIT2 : Ancora più rilevante: l'OP ha scritto "Il codice dovrebbe eliminare solo i file .DS_Store pertinenti e nient'altro." : quindi, se qualcuno si preoccupa di leggere i requisiti noiosi , tutte le soluzioni che rimuovono più di questo file sono divertenti, intelligenti, ecc. ma sbagliato .


La findsoluzione precedente è corretta. La domanda dice "elimina qualsiasi file denominato" .DS_Store "”. Quindi nessun requisito speciale in base al tipo di file.
arte

@ manatwork: sciocchezze: un file è diverso da una directory. Lungo la linea attorcigliata, la soluzione migliore è ancora rm -rf /
DavAlPi


3
Ohh, e un'altra cosa: nel code golf l'obiettivo è quello di ottenere la soluzione più breve, quindi se puoi risparmiare qualche carattere, tracciando i requisiti a tuo favore, beh, così sia. Puoi salvare 8 caratteri trattando tutto come file, come fa unix. PS: dov'è stata la sorpresa? Il fatto che alcune persone neghino il principio base di UNIX?
Johannes Kuhn,

1
Ora ho una risposta migliore , qualcosa che tutti qui possono capire.
DavAlPi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.