Hapus file ".DS_Store" sial itu

13

Jika Anda menggunakan OS X maka Anda mungkin akrab dengan file ".DS_Store" tersembunyi terkenal yang dihasilkan sebagai hasil dari menggunakan Finder.

Tantangannya adalah menulis kode yang akan melalui seluruh sistem file dan menghapus semua file bernama ".DS_Store".

Golf kode klasik - kode menang paling pendek.


Klarifikasi:

  • Kode tidak perlu menghapus file .DS_Store yang memerlukan superuser; menganggap tidak ada file seperti itu.

  • Kode seharusnya hanya menghapus file .DS_Store yang relevan dan tidak ada yang lain.

arshajii
sumber
3
Apakah kode perlu menghapus file .DS_Store yang memerlukan superuser (apakah saya perlu memanggil sudo)?
Kaya
1
@Kaya Pertanyaan bagus: tidak, tidak perlu menghapus file seperti itu.
arshajii
27
Apakah saya tetap bisa menghapus file tidak bernama .DS_Storejuga ?
Joey Adams
1
@JohannesKuhn Hasil edit terakhir seharusnya sudah terbukti dengan sendirinya, saya kira. Saya menambahkannya demi kelengkapan. Tapi saya menghargai jawaban yang cerdas, toh!
arshajii
1
@ Joey - Ubah pertanyaan ke domain militer - misalnya, hmm ... militer AS, secara acak ^^. Dan ganti "file bernama" .DS_Store "" dengan "person to kill". Dan Anda akan melihat bahwa persyaratan "hanya" jauh dari jelas.
Nicolas Barbulesco

Jawaban:

14

zsh, 19

rm -f /**/.DS_Store

(Jadikan 16 jika tidak apa-apa untuk pergi -f.)

salinan
sumber
12

Bash *, 40 30

find / -name .DS_Store -delete

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

Ini harus menanganinya (tidak terlalu golf, tidak. Terlalu lambat). Bash sepertinya benar karena kami tidak harus berurusan dengan omong kosong "sistem impor". Jika Anda ingin meminta eksekusi di lingkungan apa pun, tambahkan 4 karakter untuk bashdan 1 untuk umpan baris.

* shell apa pun kurasa, tidak bisa keluar dari kebiasaan dengan asumsi shell bourne lagi adalah satu-satunya.

Kaya
sumber
1
Bash adalah alat yang tepat untuk itu.
Johannes Kuhn
1
Apa jenis findOS X? Dengan GNU findbahkan lebih pendek: find / -name .DS_Store -delete.
manatwork
1
Tunduk pada “daftar Argumen terlalu panjang” kesalahan dan membutuhkan baik bash4 atau yang lebih baru dengan globstaropsi shell diaktifkan, atau zsh: rm /**/.DS_Store.
manatwork
1
Anda tidak melakukan sesuatu yang khusus untuk bash, jadi bisa juga sh.
Peter Taylor
10
Itu menghapus .DS_Storedirektori saya di mana saya memiliki barang-barang penting.
Konrad Borowski
9

Ruby: 38 33 karakter

File.delete *Dir['/**/.DS_Store']
manatwork
sumber
2
Dir[...]adalah jalan pintas untuk Dir.glob(...), ini akan menghemat 5 karakter.
Patrick Oscity
3
Argh! Saya tahu ada cara yang lebih pendek, tetapi saya mencarinya di Kernel. Terima kasih, @padde.
manatwork
2

ikan, 16

rm /**/.DS_Store

(Buat 19 jika -fdiperlukan untuk menghapus .DS_Storedalam direktori read-only.)

Pierre Carrier
sumber
0

Shell, 25

locate .DS_Store|xargs rm

Membutuhkan locatebasis data yang berfungsi .

Gaelan
sumber
3
Juga membutuhkan jalur tanpa karakter spasi.
manatwork
0

Python 3 , 80 byte

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

Cobalah online!

Tidak berarti dapat bersaing, tetapi hanya untuk itu :)

movatica
sumber
0

CMD, 17

del/s "/.DS_Store

Cukup mudah.

/sdiperlukan untuk mencari di dalam subdirektori juga.
"digunakan untuk menghindari /char yang seharusnya diartikan sebagai argumen (tidak valid).


sumber
-1

temukan, 38

findSolusi previus jelas salah: artinya menghapus semua yang dinamai .DS_Storetermasuk direktori, tautan, file khusus dll.

Tapi:

find / -type f -name .DS_Store -delete

ini adalah solusi minimal yang digunakan find.

DISCLAMER : Saya sangat menyarankan untuk tidak benar-benar menggunakan solusi ini pada kotak * nix nyata: mencoba menghapus sesuatu secara rekursif /adalah ide yang sangat buruk . Anda diperingatkan.

EDIT :

Jika perbedaan antara file, direktori, tautan (keras dan simbolis), pipa bernama, soket, file khusus, sistem file semu tidak jelas bagi Anda, saya sarankan untuk google beberapa istilah yang tidak diketahui ini. Anda akan terkejut, lebih bijak, dan kurang rentan terhadap (katstrofik) kesalahan.

EDIT2 : Yang lebih relevan: OP menulis "Kode hanya menghapus file .DS_Store yang relevan dan tidak ada yang lain." : jadi, jika seseorang peduli untuk membaca persyaratan yang membosankan , semua solusi yang menghapus lebih dari file-file ini lucu, cerdas, dll. tapi salah .

DavAlPi
sumber
findSolusi sebelumnya benar. Pertanyaannya mengatakan "hapus file apa pun yang bernama" .DS_Store "". Jadi tidak ada persyaratan khusus berdasarkan jenis file.
manatwork
@ manatwork: nonsense: file adalah hal yang berbeda dari direktori. Di sepanjang garis memutar Anda, solusi terbaik masih rm -rf /
DavAlPi
2
Ohh, Anda tidak google: en.wikipedia.org/wiki/Everything_is_a_file
Johannes Kuhn
3
Ohh, dan satu hal lagi: Dalam golf kode tujuannya adalah untuk mendapatkan solusi terpendek, jadi jika Anda dapat menyimpan beberapa karakter dengan menetapkan persyaratan sesuai keinginan Anda, ya, biarlah. Anda dapat menyimpan 8 karakter dengan memperlakukan semuanya sebagai file, seperti halnya unix. PS: dari mana kejutan itu? Fakta bahwa beberapa orang menyangkal prinsip dasar UNIX?
Johannes Kuhn
1
Sekarang saya mendapat jawaban yang lebih baik , sesuatu yang semua orang bisa mengerti.
DavAlPi