Como posso escrever um pequeno script para limpar os arquivos de todos os diretórios quando o computador é iniciado?

9

Eu tenho um computador convidado apenas para uso da Internet. Alguns usuários baixam alguns arquivos e os deixam na área de trabalho, mas o computador não tem espaço suficiente para todos os convidados e não é permitido colocar um arquivo nele.

O que eu quero fazer é limpar todos os arquivos dentro do diretório inicial quando o computador for iniciado, mas manter a estrutura de diretórios, como Música, Imagens, Documentos e Downloads.

Como posso fazer isso?

Achu
fonte
Para quase todas: suas respostas - desculpe - sugam e você sabe disso. E se o hóspede escolher outro idioma? E todos os arquivos ocultos de configuração e cache (histórico do navegador, lixo, ...)? Deveria haver uma lista branca de arquivos que não serão removidos (de acordo com Roland Taylor). Além disso, você deve considerar o uso xdg-user-dire ~/.config/user-dirs.dirspara os diretórios padrão.
dAnjou
@ Anjou: com a minha solução, as pastas padrão em casa serão criadas de acordo com o idioma escolhido. Além disso, o OP parece solicitar um ambiente limpo, então não consigo entender por que ter o que você chama de "lista branca".
enzotib 29/08
1
@enzotib: Ok, desculpe. Aparentemente, Roland Taylor (e eu) estava errado. Não sei o que me atingiu. Você pode editar sua resposta e adicionar a possibilidade de inserir seu script /etc/gdm/PostSessionou /etc/gdm/PreSessionpara que eu possa retirar meu voto negativo?
precisa saber é o seguinte

Respostas:

14

Você pode remover com segurança todos os arquivos no diretório inicial, porque eles são recriados, além dos arquivos copiados na criação do usuário /etc/skel, portanto,

#!/bin/bash

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

onde usernamedeve ser substituído por algo significativo.

Conforme sua solicitação ("quando o computador iniciar"), isso pode ser executado a partir de /etc/rc.local. Provavelmente, você deseja executá-lo entre cada um dos logins, então coloque-o em /etc/gdm/PostSessionou /etc/gdm/PreSession.

enzotib
fonte
Você sabe que existem alguns arquivos que, se excluídos, o impedirão de fazer login?
RolandiXor
@Roland Taylor: qual arquivo? Eu apenas testada removendo todos os arquivos
enzotib
1
@danjjl: esta opção faz o bash corresponder *a todos os arquivos e diretórios, mesmo os ocultos.
enzotib 29/08/11
1
não, os arquivos ausentes não impedirão o login. Um diretório inicial ausente pode causar problemas ou arquivos com permissões erradas definidas. Mas o programa nunca deve, em hipótese alguma, assumir que existe um arquivo. Se não existir, deve ser criado.
Jo-Erlend Schinstad
1
Eu não sugiro colocá-lo no "aplicativo de inicialização", que provavelmente é executado após o user-dirs-update-gtkscript de inicialização global. Para outro usuário, você deve alterar usernameo script. Por fim, a conta de convidado não possui um diretório inicial persistente; portanto, o script não é necessário para esta conta.
enzotib 01/09/11
6

Você está descrevendo a sessão do convidado. Não tenho muita certeza de como isso funciona, mas na 11.10 é mostrada por padrão na tela de boas-vindas. Essa conta faz exatamente o que você deseja, então a pergunta é se você deseja gastar um tempo tentando recriá-la no 11.04 ou se prefere esperar até se sentir confortável com a atualização para a 11.10. Ele está entrando no Beta 1 na quinta-feira. De qualquer forma, não custa baixar e inicializar uma sessão ao vivo e ver como você gosta. Se for exatamente do jeito que você deseja, saberá como recriá-lo.

Jo-Erlend Schinstad
fonte
2

Crie um script com o nome de sua escolha e adicione este conteúdo:

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

Salve este arquivo, marque-o como executável e adicione-o aos aplicativos de inicialização (para a conta que precisa ser limpa).

Isso limpará todos os arquivos nesses diretórios. No entanto, limpar o ~/próprio conteúdo é um pouco mais complexo, e atualizarei minha resposta se encontrar uma maneira segura de fazer isso.

RolandiXor
fonte
1

Você poderia fazer 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/*

Salve isso como algo parecido cleanup.she torne-o executável com chmod +x cleanup.sh. Então você pode ligar ./cleanup. Observe que isso remove tudo nessas pastas, use com cuidado. Certifique-se de alterar "Convidado" para o nome do seu usuário.

Você pode executar isso na inicialização, adicionando-o às preferências dos Aplicativos de Inicialização.

Você também pode adicionar esse script como um trabalho cron em seu sistema para que seja executado todas as noites. Consulte aqui para obter mais informações sobre tarefas cron.

Kris Harper
fonte
lol sua resposta é melhor que a minha: D! Btw altere -rf para -r, pois é mais seguro.
RolandiXor
@Roland: não necessariamente mais seguro e até mesmo uma possível armadilha: -fevita solicitar a remoção de arquivos somente leitura (arquivos sem o conjunto de bits de gravação) e os remove sem confirmação. Ao remover -f, um usuário pode impedir que qualquer arquivo seja removido criando-o /home/Guest/Desktop/000000000e tornando-o somente leitura. Isso fará o script travar com uma confirmação oculta e, portanto, não continuará com a remoção de arquivos. O Firefox é conhecido por fazer downloads somente leitura.
Lekensteyn
É por isso que eu o incluí originalmente. Não queria que o script falhasse no caso de um arquivo somente leitura. Eu também percebi que, de qualquer maneira, era um script bastante destrutivo, acrescentando que a -fbandeira não iria doer muito. I pode adicioná-lo de volta.
Kris Harper