Eliminar esos molestos archivos ".DS_Store"

13

Si usa OS X, entonces podría estar familiarizado con los infames archivos ocultos ".DS_Store" que se producen como resultado de usar Finder.

El desafío es escribir código que recorra todo el sistema de archivos y elimine cualquier archivo llamado ".DS_Store".

Golf de código clásico: gana el código más corto.


Aclaraciones:

  • El código no necesita eliminar ningún archivo .DS_Store que requiera superusuario; asuma que no existen tales archivos.

  • El código solo debe eliminar los archivos relevantes .DS_Store y nada más.

arshajii
fuente
3
¿El código necesita eliminar archivos .DS_Store que requieren superusuario (¿necesito invocar sudo?)
Kaya
1
@Kaya Buena pregunta: no, no es necesario eliminar dichos archivos.
arshajii
27
¿Está bien eliminar archivos sin nombre .DS_Storetambién ?
Joey Adams
1
@JohannesKuhn La última edición debería haber sido evidente, supongo. Lo agregué por completo. ¡Pero aprecio la respuesta inteligente, no obstante!
arshajii
1
@Joey - Transponga la pregunta al dominio militar, por ejemplo, hmm ... los militares de los EE. UU., Al azar ^^. Y reemplace "archivo llamado" .DS_Store "" con "persona para matar". Y verá que el requisito "solo" está lejos de ser evidente.
Nicolas Barbulesco

Respuestas:

14

zsh, 19

rm -f /**/.DS_Store

(Haga ese 16 si está bien dejarlo fuera -f)

Copiar
fuente
12

Bash *, 40 30

find / -name .DS_Store -delete

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

Esto debería manejarlo (no muy golfizado, no demasiado fácil de mencionar). Bash parece correcto porque no tenemos que lidiar con ninguna tontería del "sistema de importación". Si desea requerir la ejecución en cualquier entorno, agregue 4 caracteres para bashy 1 para un avance de línea.

* cualquier caparazón, supongo, simplemente no puedo dejar el hábito suponiendo que la capa de bourne nuevamente sea la única.

Kaya
fuente
1
Bash es exactamente la herramienta adecuada para eso.
Johannes Kuhn
1
¿Qué tipo de findOS X tiene? Con GNU findes aún más corto: find / -name .DS_Store -delete.
Manatwork
1
Sujeto a la “lista de argumentos demasiado larga” error y requiere ya sea bash4 o más nuevo con globstarla opción de cáscara de encendido, o zsh: rm /**/.DS_Store.
manatwork
1
No estás haciendo nada específico de bash, por lo que bien podría ser sh.
Peter Taylor
10
Eliminó mi .DS_Storedirectorio donde tenía cosas importantes.
Konrad Borowski
9

Rubí: 38 33 caracteres

File.delete *Dir['/**/.DS_Store']
hombre trabajando
fuente
2
Dir[...]es un acceso directo para Dir.glob(...), esto le ahorrará 5 caracteres.
Patrick Oscity
3
Argh! Sabía que había un camino más corto, pero lo busqué Kernel. Gracias @padde.
manatwork
2

pescado, 16

rm /**/.DS_Store

(Haga 19 si -fes necesario para eliminar .DS_Storeen directorios de solo lectura).

Pierre Carrier
fuente
0

Shell, 25

locate .DS_Store|xargs rm

Requiere locatebase de datos de trabajo .

Gaelan
fuente
3
También requiere rutas sin caracteres de espacio en blanco.
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)

Pruébalo en línea!

De ninguna manera es competitiva, pero solo por eso :)

movatica
fuente
0

CMD, 17

del/s "/.DS_Store

Muy claro.

/ses necesario para buscar dentro de subdirectorios también.
"se usa para escapar del /carácter que de otro modo se interpretaría como un argumento (no válido).


fuente
-1

encontrar, 38

La findsolución anterior es sencillamente incorrecta: significa eliminar todo lo que se .DS_Storeincluye, incluido el directorio, los enlaces, el archivo especial, etc.

Pero:

find / -type f -name .DS_Store -delete

Es la solución mínima que se utiliza find.

DISCLAMER : Recomiendo encarecidamente no usar realmente esta solución en un cuadro * nix real: tratar de eliminar algo de forma recursiva /es una muy mala idea. Estás advertido

EDITAR :

Si las diferencias entre archivos, directores, enlaces (rígidos y simbólicos), canalizaciones con nombre, tomas, archivos especiales, sistemas de pseudoarchivos no le resultan claros, le sugiero que busque en Google algunos de estos términos desconocidos. Serás sorpresa, más sabio y menos propenso a errores (catastróficos).

EDIT2 : Aún más relevante: el OP escribió "El código solo debe eliminar los archivos relevantes .DS_Store y nada más". : entonces, si a alguien le importa leer los requisitos aburridos , todas las soluciones que eliminan más que estos archivos son divertidas, inteligentes, etc. pero equivocada .

DavAlPi
fuente
La findsolución anterior es correcta. La pregunta dice "eliminar cualquier archivo llamado" .DS_Store "". Por lo tanto, no hay requisitos especiales basados ​​en el tipo de archivo.
manatwork
@ manatwork: sin sentido: un archivo es algo diferente de un directorio. A lo largo de su línea retorcida, la mejor solución sigue siendo rm -rf /
DavAlPi
2
Ohh, no buscaste en google: en.wikipedia.org/wiki/Everything_is_a_file
Johannes Kuhn
3
Ohh, y otra cosa: en el golf de código, el objetivo es obtener la solución más corta, por lo que si puede guardar algunos caracteres trazando los requisitos a su favor, bueno, que así sea. Puede guardar 8 caracteres tratando todo como un archivo, como lo hace Unix. PD: ¿dónde estuvo la sorpresa? ¿El hecho de que algunas personas niegan el principio básico de UNIX?
Johannes Kuhn
1
Ahora tengo una mejor respuesta , algo que todos aquí pueden entender.
DavAlPi