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.


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


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.


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

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


0

Shell, 25

locate .DS_Store|xargs rm

Wymaga działającej locatebazy danych.


3
Wymaga również ścieżek bez znaków spacji.
manatwork


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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.