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.


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


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.


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

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


0

Shell, 25

locate .DS_Store|xargs rm

Requer locatebanco de dados de trabalho .


3
Também requer caminhos sem caracteres de espaço em branco.
manatwork


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


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.