Usuń te nieznośne pliki „.DS_Store”

13

Jeśli używasz OS X, możesz znać niesławne ukryte pliki „.DS_Store”, które powstają w wyniku użycia Findera.

Wyzwaniem jest napisanie kodu, który przejdzie przez cały system plików i usunięcie dowolnego pliku o nazwie „.DS_Store”.

Klasyczny golf - wygrywa najkrótszy kod.


Wyjaśnienia:

  • Kod nie musi usuwać żadnych plików .DS_Store, które wymagają administratora; zakładamy, że takie pliki nie istnieją.

  • Kod powinien usuwać tylko odpowiednie pliki .DS_Store i nic więcej.

arshajii
źródło
3
Czy kod musi usuwać pliki .DS_Store, które wymagają superużytkownika (czy muszę wywoływać sudo)?
Kaya
1
@Kaya Dobre pytanie: nie, nie trzeba usuwać takich plików.
arshajii
27
Czy mogę usunąć pliki nie nazwanych .DS_Storerównież ?
Joey Adams
1
@JohannesKuhn Najnowsza edycja powinna być oczywista, zakładam. Dodałem go ze względu na kompletność. Doceniam jednak sprytną odpowiedź!
arshajii
1
@Joey - Transponuj pytanie do domeny wojskowej - na przykład hmm… wojsko USA losowo ^^. I zamień „plik o nazwie„ .DS_Store ”” na „osoba do zabicia”. Przekonasz się, że wymaganie „tylko” jest dalekie od oczywistości.
Nicolas Barbulesco

Odpowiedzi:

14

zsh, 19

rm -f /**/.DS_Store

(Zrób 16, jeśli można pominąć -f.)

Kopiuj
źródło
12

Bash *, 40 30

find / -name .DS_Store -delete

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

To powinno sobie z tym poradzić (niezbyt golfa, nie z tego powodu cudownie wolno). Bash wydaje się słuszny, ponieważ nie mamy do czynienia z bzdurami dotyczącymi „systemu importu”. Jeśli chcesz wymagać wykonania w dowolnym środowisku, dodaj 4 znaki dla bashi 1 dla nowego wiersza.

* jakikolwiek pocisk, jak sądzę, po prostu nie może wyrwać się z przyzwyczajenia, zakładając, że łupina Bourne'a jest jedyna.

Kaya
źródło
1
Bash jest do tego właściwym narzędziem.
Johannes Kuhn
1
Jakiego rodzaju findma OS X? GNU findjest jeszcze krótszy: find / -name .DS_Store -delete.
manatwork
1
Temat z „listy argumentów zbyt długo” błędów i wymaga albo bash4 lub nowsza z globstaropcją powłoki włączone lub zsh: rm /**/.DS_Store.
manatwork
1
Nie robisz nic specyficznego dla basha, więc równie dobrze może to być sh.
Peter Taylor
10
Usunęło mój .DS_Storekatalog, w którym miałem ważne rzeczy.
Konrad Borowski
9

Rubin: 38 33 znaków

File.delete *Dir['/**/.DS_Store']
człowiek w pracy
źródło
2
Dir[...]jest skrótem do Dir.glob(...), pozwoli ci to zaoszczędzić 5 znaków.
Patrick Oscity
3
Argh! Wiedziałem, że jest krótsza droga, ale szukałem jej w Kernel. Dziękuję, @padde.
manatwork
2

ryba, 16

rm /**/.DS_Store

(Ustaw 19, jeśli -fjest wymagane do usunięcia .DS_Storew katalogach tylko do odczytu).

Pierre Carrier
źródło
0

Shell, 25

locate .DS_Store|xargs rm

Wymaga działającej locatebazy danych.

Gaelan
źródło
3
Wymaga również ścieżek bez znaków spacji.
manatwork
0

Python 3 , 80 bajtów

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

Wypróbuj online!

W żadnym wypadku nie jest konkurencyjny, ale tylko ze względu na to :)

movatica
źródło
0

CMD, 17

del/s "/.DS_Store

Całkiem proste.

/sjest również wymagane do wyszukiwania w podkatalogach.
"służy do zmiany /znaku, który w innym przypadku byłby interpretowany jako (nieprawidłowy) argument.


źródło
-1

znaleźć, 38

Poprzednie findrozwiązanie jest po prostu złe: oznacza usunięcie wszystkiego o nazwie, w .DS_Storetym katalogu, linków, pliku specjalnego itp.

Ale:

find / -type f -name .DS_Store -delete

jest to minimalne rozwiązanie find.

ODKRYWANIE : Zdecydowanie odradzam używanie tego rozwiązania na prawdziwym * pudełku nix: próba usunięcia czegoś rekurencyjnie /to bardzo zły pomysł. Jesteś ostrzeżony.

EDYCJA :

Jeśli różnice między plikami, katalogami, linkami (twardymi i symbolicznymi), nazwanymi potokami, gniazdami, plikami specjalnymi, pseudoplikami nie są dla ciebie jasne, sugeruję przejrzeć niektóre z tych nieznanych terminów w Google. Będziesz zaskoczony, mądrzejszy i mniej podatny na (katstroficzne) błędy.

EDIT2 : Jeszcze bardziej odpowiedni: OP napisał: „Kod powinien usuwać tylko odpowiednie pliki .DS_Store i nic więcej.” : jeśli więc ktoś chce przeczytać nudne wymagania, wszystkie rozwiązania, które usuwają więcej niż te pliki, są zabawne, inteligentne itp. ale źle .

DavAlPi
źródło
Poprzednie findrozwiązanie jest poprawne. Pytanie brzmi „usuń dowolny plik o nazwie„ .DS_Store ””. Więc nie ma specjalnych wymagań w zależności od typu pliku.
manatwork
@ manatwork: nonsens: plik jest czymś innym niż katalog. Wzdłuż twisted line nadal najlepszym rozwiązaniem jest rm -rf /
DavAlPi
2
Och, nie wyszukiwałeś w Google: en.wikipedia.org/wiki/Everything_is_a_file
Johannes Kuhn
3
Aha, i jeszcze jedno: w golfie kodowym celem jest znalezienie najkrótszego rozwiązania, więc jeśli możesz zaoszczędzić kilka znaków, sprawdzając wymagania na swoją korzyść, niech tak będzie. Możesz zapisać 8 znaków, traktując wszystko jak plik, tak jak robi to Unix. PS: gdzie była niespodzianka? Fakt, że niektórzy ludzie zaprzeczają podstawowej zasadzie UNIX?
Johannes Kuhn
1
Teraz mam lepszą odpowiedź , coś, co każdy może zrozumieć.
DavAlPi