Exclua os arquivos ".DS_Store" traquinas

13

Se você usa o OS X, pode estar familiarizado com os famosos arquivos ".DS_Store" ocultos produzidos como resultado do uso do Finder.

O desafio é escrever um código que percorra todo o sistema de arquivos e exclua qualquer arquivo chamado ".DS_Store".

Código clássico de golfe - o código mais curto vence.


Esclarecimentos:

  • O código não precisa excluir nenhum arquivo .DS_Store que exija superusuário; suponha que esses arquivos não existam.

  • O código deve excluir apenas os arquivos .DS_Store relevantes e nada mais.

arshajii
fonte
3
O código precisa excluir arquivos .DS_Store que exigem superusuário (preciso chamar o sudo)?
Kaya
1
@Kaya Boa pergunta: não, não é necessário excluir esses arquivos.
Arshajii # 30/13
27
Tudo bem excluir arquivos não nomeados .DS_Storetambém ?
Joey Adams
1
@JohannesKuhn A última edição deveria ter sido evidente, eu diria. Eu o adicionei por uma questão de integridade. Mas agradeço a resposta inteligente, no entanto!
Arshajii
1
@ Joey - Transponha a questão para o domínio militar - por exemplo, hmm… os militares dos EUA, aleatoriamente ^^. E substitua "arquivo chamado" .DS_Store "" por "person to kill". E você verá que o requisito "somente" está longe de ser evidente.
Nicolas Barbulesco 30/05

Respostas:

14

zsh, 19

rm -f /**/.DS_Store

(Faça 16 se estiver de acordo em deixar de fora -f.)

cópia de
fonte
12

Festança *, 40 30

find / -name .DS_Store -delete

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

Isso deve ser resolvido (não muito golfado, não. Para uma menção maravilhosamente lenta). O Bash parece certo, porque não precisamos lidar com nenhuma bobagem do "sistema de importação". Se você deseja exigir execução em qualquer ambiente, adicione 4 caracteres para bashe 1 para um feed de linha.

* qualquer concha, eu acho, simplesmente não consigo abandonar o hábito assumindo que a bourne novamente é a única.

Kaya
fonte
1
O Bash é exatamente a ferramenta certa para isso.
Johannes Kuhn
1
Que tipo de findOS X? Com GNU findé ainda menor: find / -name .DS_Store -delete.
manatwork
1
Sujeito a “lista de argumentos muito longa” erro e requer ou bash4 ou mais recente com globstaropção de shell ligado, ou zsh: rm /**/.DS_Store.
manatwork
1
Você não está fazendo nada específico do bash, por isso pode ser uma merda.
Peter Taylor
10
Ele removeu meu .DS_Storediretório onde eu tinha coisas importantes.
precisa
9

Ruby: 38 33 caracteres

File.delete *Dir['/**/.DS_Store']
homem a trabalhar
fonte
2
Dir[...]é um atalho para Dir.glob(...), você economizará 5 caracteres.
Patrick Oscity
3
Argh! Eu sabia que havia uma maneira mais curta, mas procurei por ela Kernel. Obrigado, @padde.
Manatwork
2

peixe, 16

rm /**/.DS_Store

(Faça 19 se -ffor necessário excluir .DS_Storenos diretórios somente leitura.)

Pierre Carrier
fonte
0

Shell, 25

locate .DS_Store|xargs rm

Requer locatebanco de dados de trabalho .

Gaelan
fonte
3
Também requer caminhos sem caracteres de espaço em branco.
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)

Experimente online!

De modo algum competitivo, mas apenas por uma questão :)

movatica
fonte
0

CMD, 17

del/s "/.DS_Store

Bem direto.

/stambém é necessário para pesquisar em subdiretórios.
"é usado para escapar do /caractere que, de outra forma, seria interpretado como um argumento (inválido).


fonte
-1

encontrar, 38

A findsolução previus está completamente errada: significa excluir tudo o que é chamado, .DS_Storeincluindo diretório, links, arquivo especial etc.

Mas:

find / -type f -name .DS_Store -delete

é a solução mínima usando find.

DISCLAMER : Aconselho vivamente a não usar realmente esta solução em uma caixa real * nix: tentar excluir algo de forma recursiva /é uma péssima idéia. Você é avisado.

EDIT :

Se as diferenças entre arquivos, diretórios, links (rígidos e simbólicos), pipes nomeados, soquetes, arquivos especiais e sistemas de pseudo-arquivos não estiverem claras para você, sugiro que você procure no Google alguns desses termos desconhecidos. Você ficará surpreso, mais sábio e menos propenso a erros (catastróficos).

EDIT2 : Ainda mais relevante: o OP escreveu "O código deve excluir apenas os arquivos .DS_Store relevantes e nada mais". : portanto, se alguém quiser ler os requisitos chatos , todas as soluções que removem mais do que esses arquivos são engraçadas, inteligentes, etc. mas errado .

DavAlPi
fonte
A findsolução anterior está correta. A pergunta diz "excluir qualquer arquivo chamado" .DS_Store "". Portanto, nenhum requisito especial com base no tipo de arquivo.
manatwork
@ manatwork: absurdo: um arquivo é uma coisa diferente de um diretório. Ao longo de sua linha de torcida, a melhor solução ainda é rm-rf /
DavAlPi
2
Ah, você não pesquisou no google: en.wikipedia.org/wiki/Everything_is_a_file
Johannes Kuhn
3
Ah, e outra coisa: no código golf, o objetivo é obter a solução mais curta; portanto, se você pode economizar alguns caracteres, classificando os requisitos a seu favor, bem, que assim seja. Você pode salvar 8 caracteres tratando tudo como arquivo, como o unix. PS: onde foi a surpresa? O fato de algumas pessoas negarem o princípio básico do UNIX?
Johannes Kuhn
1
Agora eu tenho uma resposta melhor , algo que todos aqui podem entender.
DavAlPi