Как я могу написать небольшой скрипт для очистки файлов каждого каталога при запуске компьютера?


9

У меня есть гостевой компьютер только для пользования интернетом. Некоторые пользователи скачивают некоторые файлы и оставляют их на рабочем столе, но на компьютере недостаточно места для всех гостей, и ему не разрешено помещать туда файлы.

Что я хочу сделать, так это очистить каждый файл в домашнем каталоге при запуске компьютера, но сохранить структуру каталогов, такую ​​как Музыка, Изображения, Документы и Загрузки.

Как я могу сделать это?


Почти на все: ваши ответы - извините - отстой, и вы это знаете. Что если гость выберет другой язык? Как насчет всех этих скрытых файлов конфигурации и кэша (история браузера, корзина, ...)? Скорее, должен быть белый список файлов, которые не будут удалены (согласно Роланду Тейлору). Кроме того, вы должны рассмотреть возможность использования xdg-user-dirи ~/.config/user-dirs.dirsдля каталогов по умолчанию.
Анжу

@dAnjou: с моим решением стандартные домашние папки будут создаваться в соответствии с выбранным языком. Кроме того, OP, кажется, запрашивает чистую среду, поэтому я не могу понять, зачем иметь то, что вы называете «белым списком».
энзотиб,

1
@enzotib: Хорошо, извини. Видимо Роланд Тейлор (и я) был неправ. Я не знаю, что меня поразило. Можете ли вы отредактировать свой ответ и добавить возможность вставить свой сценарий /etc/gdm/PostSessionили /etc/gdm/PreSessionчтобы я мог вернуть свое пониженное голосование?
Анжу

Ответы:


14

Вы можете безопасно удалить все файлы в домашнем каталоге, потому что они воссоздаются, кроме файлов, скопированных при создании пользователя из /etc/skel, поэтому

#!/bin/bash

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

где usernameдолжно быть заменено чем-то значимым.

По вашему запросу («при ​​запуске компьютера») это можно выполнить с /etc/rc.local. Скорее всего, вы хотите выполнить его между каждым логином, поэтому поставьте его под /etc/gdm/PostSessionили /etc/gdm/PreSession.


Вы знаете, что есть файлы, которые в случае удаления не позволят вам войти в систему?
RolandiXor

@ Роланд Тейлор: какой файл? Я только что проверил удаление всех файлов
enzotib

1
@danjjl: эта опция сопоставляет bash *со всеми файлами и каталогами, даже со скрытыми.
энзотиб,

1
Нет, отсутствующие файлы не помешают вам войти в систему. Отсутствующий домашний каталог может вызвать проблемы или файлы с неверно установленными разрешениями. Но программа ни при каких обстоятельствах не должна предполагать, что файл существует. Если его не существует, его просто нужно создать.
Джо-Эрленд Шинстад

1
Я не предлагаю , чтобы поместить его в «запуске приложения», которые, вероятно , бежать после того, как в user-dirs-update-gtkглобальном сценарии запуска. Для другого пользователя вы должны изменить usernameв сценарии. Наконец, гостевая учетная запись не имеет постоянного домашнего каталога, поэтому сценарий не нужен для этой учетной записи.
энзотиб

6

Вы описываете гостевую сессию. Я не совсем уверен, как это работает, но в 11.10 он отображается по умолчанию на экране приветствия. Эта учетная запись делает именно то, что вы хотите, поэтому вопрос заключается в том, хотите ли вы потратить время, пытаясь воссоздать его 11.04, или предпочитаете подождать, пока не освоитесь с обновлением до 11.10. Это входит в бета 1 в четверг. В любом случае, не мешает скачать и загрузить сеанс в реальном времени и посмотреть, как вам это понравится. Если это именно то, что вы хотите, то вы будете знать, как воссоздать его.


2

Создайте скрипт с именем по вашему выбору и добавьте этот контент:

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

Сохраните этот файл, пометьте его как исполняемый и добавьте в свои запускаемые приложения (для учетной записи, которую необходимо очистить).

Это очистит все файлы в этих каталогах. Однако очистить его содержимое ~/немного сложнее, и я обновлю свой ответ, если найду безопасный способ сделать это.


1

Вы могли бы сделать что-то вроде

#!/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/*

Сохраните это как что-то вроде cleanup.shи сделайте его исполняемым с chmod +x cleanup.sh. Тогда вы можете позвонить ./cleanup. Обратите внимание, что это удаляет все в этих папках, используйте с осторожностью. Обязательно измените «Гость» на имя вашего пользователя.

Вы можете запустить его при запуске, добавив его в настройки «Запуск приложений».

Вы также можете добавить этот скрипт в качестве задания cron в вашей системе, чтобы он работал каждую ночь. Смотрите здесь для получения дополнительной информации о работе cron.


лол твой ответ лучше моего: D! Кстати, измените -rf на -r, так как это безопаснее.
RolandiXor

@Roland: не обязательно более безопасный и даже возможный подводный камень: -fпредотвращает запрос на удаление файлов только для чтения (файлов без установленного бита записи) и удаляет их без подтверждения. Удаляя -f, пользователь может предотвратить удаление любого файла, создав его /home/Guest/Desktop/000000000и сделав его доступным только для чтения. Это приведет к зависанию сценария со скрытым подтверждением и, следовательно, к продолжению удаления файлов. Firefox, как известно, делает загрузки только для чтения.
Лекенштейн

Вот почему я изначально включил его. Я не хотел, чтобы скрипт не работал в случае файла только для чтения. Я также решил, что в любом случае это был довольно разрушительный сценарий, добавление -fфлага не сильно повредит. Я могу добавить его обратно.
Крис Харпер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.