¿Cómo puedo escribir un pequeño script para limpiar los archivos de cada directorio cuando se inicia la computadora?

9

Tengo una computadora invitada solo para uso de Internet. Algunos usuarios descargan algunos archivos y los dejan en el escritorio, pero la computadora no tiene suficiente espacio para todos los invitados y no está permitido colocar un archivo allí.

Lo que quiero hacer es limpiar cada archivo dentro del directorio de inicio cuando se inicia la computadora, pero mantener la estructura del directorio como Música, Imágenes, Documentos y Descargas.

¿Cómo puedo lograr esto?

Achu
fuente
Para casi todos: sus respuestas, perdón, apestan y lo saben. ¿Qué pasa si el invitado elige otro idioma? ¿Qué pasa con todos esos archivos ocultos de configuración y caché (historial del navegador, basura, ...)? Debería haber una lista blanca de archivos que no se eliminarán (según Roland Taylor). Además, debe considerar usar xdg-user-diry ~/.config/user-dirs.dirspara los directorios predeterminados.
dAnjou
@dAnjou: con mi solución, las carpetas estándar en el hogar se crearán de acuerdo con el idioma elegido. Además, el OP parece solicitar un entorno limpio, por lo que no puedo entender por qué tener lo que llama una "lista blanca".
enzotib
1
@enzotib: Ok, lo siento. Al parecer, Roland Taylor (y yo) estaba equivocado. No sé qué me golpeó. ¿Puedes editar tu respuesta y agregar la posibilidad de poner tu script en /etc/gdm/PostSessiono /etc/gdm/PreSessionpara que pueda recuperar mi voto negativo?
dAnjou

Respuestas:

14

Puede eliminar de forma segura todos los archivos en el directorio de inicio, ya que se recrean, aparte de los archivos copiados en la creación del usuario /etc/skel, por lo que

#!/bin/bash

shopt -s dotglob 
rm -rf /home/username/*
sudo -u username cp -a /etc/skel/* /home/username/

donde usernamedebe ser sustituido por algo significativo.

Según su solicitud ("cuando se inicia la computadora") esto se puede ejecutar desde /etc/rc.local. Lo más probable es que desee ejecutarlo entre cada inicio de sesión, así que póngalo debajo de /etc/gdm/PostSessiono /etc/gdm/PreSession.

enzotib
fuente
¿Sabes que hay algunos archivos que si se eliminan te impedirán iniciar sesión?
RolandiXor
@Roland Taylor: ¿qué archivo? Acabo de probar eliminar todos los archivos
enzotib
1
@danjjl: esta opción hace que bash coincida *con todos los archivos y directorios, incluso los que están ocultos.
enzotib
1
no, los archivos faltantes no le impedirán iniciar sesión. Un directorio de inicio perdido puede causar problemas o archivos con permisos incorrectos. Pero el programa nunca debe, bajo ninguna circunstancia, asumir que existe un archivo. Si no existe, debería crearse.
Jo-Erlend Schinstad
1
No sugiero ponerlo en "aplicación de inicio", que probablemente se ejecute después del user-dirs-update-gtkscript de inicio global. Para otro usuario, debe cambiar el usernameen el script. Finalmente, la cuenta de invitado no tiene un directorio de inicio persistente, por lo que el script no es necesario para esta cuenta.
enzotib
6

Estás describiendo la sesión de invitado. No estoy completamente seguro de cómo funciona, pero en 11.10 se muestra de forma predeterminada en la pantalla de bienvenida. Esa cuenta hace exactamente lo que desea, por lo que la pregunta es si desea pasar tiempo tratando de recrearla en 11.04, o si prefiere esperar hasta que se sienta cómodo con la actualización a 11.10. Entrará en Beta 1 el jueves. En cualquier caso, no está de más descargar y arrancar una sesión en vivo y ver cómo te gusta. Si es exactamente como lo quieres, entonces sabrás cómo recrearlo.

Jo-Erlend Schinstad
fuente
2

Cree un script con el nombre que elija y agregue este contenido:

rm -r ~/Music/*
rm -r ~/Pictures/*
rm -r ~/Documents/*
rm -r ~/Videos/*
rm -r ~/Downloads*
rm -r ~/Desktop/*

Guarde este archivo, márquelo como ejecutable y agréguelo a sus aplicaciones de inicio (para la cuenta que necesita ser limpiada).

Esto borrará todos los archivos en esos directorios. Sin embargo, limpiar el contenido de ~/sí mismo es un poco más complejo, y actualizaré mi respuesta si encuentro una forma segura de hacerlo.

RolandiXor
fuente
1

Podrías hacer algo como

#!/bin/bash

rm -rf /home/Guest/Desktop/*
rm -rf /home/Guest/Documents/*
rm -rf /home/Guest/Downloads/*
rm -rf /home/Guest/Music/*
rm -rf /home/Guest/Pictures/*
rm -rf /home/Guest/Videos/*

Guarde esto como algo así cleanup.shy hágalo ejecutable con chmod +x cleanup.sh. Entonces puedes llamar ./cleanup. Tenga en cuenta que esto elimina todo en estas carpetas, use con cuidado. Asegúrese de cambiar "Invitado" al nombre de su usuario.

Puede hacer que esto se ejecute al inicio agregándolo a las preferencias de Aplicaciones de inicio.

También puede agregar este script como un trabajo cron en su sistema para que se ejecute todas las noches. Consulte aquí para obtener más información sobre trabajos cron.

Kris Harper
fuente
jajaja tu respuesta es mejor que la mía: D! Por cierto, cambie -rf a -r ya que eso es más seguro.
RolandiXor
@Roland: no necesariamente más seguro e incluso una posible trampa: -fimpide solicitar la eliminación de archivos de solo lectura (archivos sin el conjunto de bits de escritura) y los elimina sin confirmación. Al eliminar -f, un usuario puede evitar que se elimine cualquier archivo creando el /home/Guest/Desktop/000000000archivo y haciéndolo de solo lectura. Esto hará que el script se cuelgue con una confirmación oculta y, por lo tanto, no continúe con la eliminación de archivos. Firefox es conocido por hacer descargas de solo lectura.
Lekensteyn
Es por eso que originalmente lo incluí. No quería que el script fallara en el caso de un archivo de solo lectura. También pensé que, de todos modos, era un guión bastante destructivo, agregando que la -fbandera no iba a doler mucho. Puedo agregarlo nuevamente.
Kris Harper