Страница 1 из 1
Допиливание скрипта
Добавлено: 2011-04-14 8:10:23
alex117
Добрый день.
Есть домен на Samba и юзеры на XP. У каждого юзера есть своя шара на сервере, где хранятся его докумены и windows-профиль (.msprofile) Стоит задача каждый день из этого профиля перемещать данные с рабочего стола (.msprofile/Рабочий стол) в другую папку на этой же шаре. Знаний в bash еще не много, но кое-что написал, осталось только сделать так, чотбы скрипт не перемещал ярлыки, созданные пользователем, иначе он перемещает все, что есть в папке "Рабочий стол". Нужно что-то вроде функции "exclude *.lnk" Ну и может будут какие-то комментарии или предложение по улучшению скрипта.
Код: Выделить всё
#!/bin/sh
user=user1
dir=DATA_STORE # куда перемещаем все файлы
file='ПРОЧТИ_МЕНЯ!!!.txt' # информационный файл для юзера
function move { # собственно сама функция перемещения
cd "/home/$user/.msprofile/Рабочий стол"
mv * /home/$user/$dir
touch $file
echo "ВСЕ ФАЙЛЫ С РАБОЧЕГО СТОЛА ПЕРЕНЕСЕНЫ НА" > $file
echo "СЕТЕВОЙ ДИСК P:/DATA_STORE" > $file
echo "И ТАК БУДЕТ ПОСТОЯННО" > $file
chown $user $file
chown -R $user /home/$user
chmod -R 770 /home/$user
}
cd /home/$user
if [ -d $dir ]; then
move
else
mkdir $dir
move
fi
Re: Допиливание скрипта
Добавлено: 2011-04-14 9:05:21
unix-admin
find /path_to_search_dir -type f ! -iname "*.lnk" -exec mv {} /path_to_dst_dir \;
Re: Допиливание скрипта
Добавлено: 2011-04-14 12:31:27
unix-admin
вот так будет правильнее:
Код: Выделить всё
sh -c 'for i in `find /path_to_search_dir ! -iname "*.lnk" -and ! -path "/path_to_search_dir" -print`; do echo $i; mv $i /path_to_dst_dir; done'
Re: Допиливание скрипта
Добавлено: 2011-04-14 15:22:35
alex117
спасибо, попробую.
Re: Допиливание скрипта
Добавлено: 2011-04-15 11:46:26
kpp
Если немного привести к читабельному виду, и записав скрипт в файл:
finedall.sh ,
Код: Выделить всё
find /path_to_search_dir ! -iname "*.lnk" -and ! -path "/path_to_search_dir" -print
можно сократить до
Код: Выделить всё
find /path_to_search_dir/* ! -iname "*.lnk" -print
получаем:
Код: Выделить всё
#!/bin/sh
#
# finedall.sh
path_in="$1"
path_out="$2"
exclude_mask="*.lnk"
file_list="`find ${path_in}/* ! -iname "${exclude_mask}" -print`"
for i in ${file_list}
do
echo "${i}"
# когда появится полная уверенность, можно раскомментарить след. строку ;)
# mv "${i}" "${path_out}"
done
Несколько наводящих вопросов\уточнений к задаче:
1.В общем случае понадобится не переносить не только файлы "*.lnk", а еще, к примеру, "*.pif" или вообще по маске.
2.В общем случае на рабочем столе пользователя могут быть и папки\каталоги, что с ними делать и делать ли?
3.Однозначно возникнет ситуация, когда в каталоге куда, переносятся файлы пользователя, уже будут файлы с такими именами.
Что делать в этом случае?
-Перезаписывать новыми?
-Оставлять старые, при этом удалять или оставлять одноименные файлы на рабочем столе?
-Сохранять все одноименные файлы, генерируя уникальное имя или сохранять каждый рабочий день пользователя в свой каталог с названием - дата?
Re: Допиливание скрипта
Добавлено: 2011-04-15 21:58:41
FiL
А зачем оно вообще надо?
может сделать один раз
ln -s /home/$user/$dir/ /home/$user/.msprofile/Рабочий стол
и пускай юзверь сразу все складывает туда...
Хотя если это по-любому тот-же раздел диска, то смысла в подобных извратах всё равно не вижу. Какая разница где у юзера доки лежат. Что за желание контролировать что у юзера на десктопе. Пускай делает как ему удобнее. Это ЕГО десктоп.
Re: Допиливание скрипта
Добавлено: 2011-04-19 8:13:15
alex117
А зачем оно вообще надо?
А я сейчас поясню зачем. Когда у юзера 8Гб на рабочем столе и он работает за одной и той же машиной, то проблем нет, при входе/выходе из системы с профилем на сервере синхронизируется незначительный объем данных, а когда человек садится за другой комп, и заходит первый раз в систему, где еще нет его локального профиля, то пока все эти 8Гб не выкачаются на клиентский комп, он не войдет в систему. Это занимает много времени, начинаются жалобы типа "Почему у меня комп тупит?" и прочее. Аналогичная ситуация будет в том случае, если юзер сохранил файл, скажем 4Гб на рабочий стол и делает выход из системы. Профиль опять синхронизируется с копией на сервере и соостветственно пока эти долбанные 4Гб не закачаются на сервер, то комп не выключится, а когда это все одновременно происходит на 50 рабочих местах, утром или вечером при входе/выходе из сеанса, то возникают, мягко говоря, небольшие тормоза.
может сделать один раз
ln -s /home/$user/$dir/ /home/$user/.msprofile/Рабочий стол
и пускай юзверь сразу все складывает туда..
Соответственно не поможет (читай пост выше)
Re: Допиливание скрипта
Добавлено: 2011-04-19 8:21:08
alex117
Несколько наводящих вопросов\уточнений к задаче:
1.В общем случае понадобится не переносить не только файлы "*.lnk", а еще, к примеру, "*.pif" или вообще по маске.
2.В общем случае на рабочем столе пользователя могут быть и папки\каталоги, что с ними делать и делать ли?
3.Однозначно возникнет ситуация, когда в каталоге куда, переносятся файлы пользователя, уже будут файлы с такими именами.
Что делать в этом случае?
-Перезаписывать новыми?
-Оставлять старые, при этом удалять или оставлять одноименные файлы на рабочем столе?
-Сохранять все одноименные файлы, генерируя уникальное имя или сохранять каждый рабочий день пользователя в свой каталог с названием - дата?
Только "*.lnk", все папки и файлы должны убираться со стола. Т.к пользователь был предупрежден, что на рабочем столе ничего не должно храниться, то допускается и перезапись при существовании файлов. Тем более недавно поднял Bacula, так что есть ежедневные инкрементные копии профилей. Если каждый день генерировать новые имена файлов, то через пару недель диск с /home будет трещать по швам.
Re: Допиливание скрипта
Добавлено: 2011-04-19 8:31:05
alex117
Там чуток подправить надо, наверное
chown -R $user /home/$user
chmod -R 770 /home/$user
на
chown -R $user /home/$user/$dir
chmod -R 770 /home/$user/$dir
Т.к меняя атрибуты у всех файлов в папке /home/$user мы провоцируем bacula, который у меня работает в сети, на полный бэкап вместо инкрементного.
Re: Допиливание скрипта
Добавлено: 2011-04-19 8:35:07
Alex Keda
гигабитная сеть решит ваши проблемы
Re: Допиливание скрипта
Добавлено: 2011-04-19 9:55:54
kpp
2
alex117
Еще вопросы.
В каталогах на рабочем столе могут быть сгруппированы ярлыки. Как поступать с такими каталогами?
В моем посте
http://forum.lissyara.su/viewtopic.php? ... 73#p292253 скрипт только для файлов.
Для каталогов нужно думать с учетом всех моментов. Жестко переносить каталоги с ярлыками не считаю хорошим решением.
Ну и пользователь может обозвать 8-ми гиговый файл *.lnk - думаю нужно и размер файлов мониторить, а не только расширение.
Re: Допиливание скрипта
Добавлено: 2011-04-19 10:03:06
kpp
Возможно часть вопросов можно отсечь квотированием?
Re: Допиливание скрипта
Добавлено: 2011-04-19 10:27:52
alex117
Для каталогов нужно думать с учетом всех моментов. Жестко переносить каталоги с ярлыками не считаю хорошим решением.
Ну и пользователь может обозвать 8-ми гиговый файл *.lnk - думаю нужно и размер файлов мониторить, а не только расширение.
Таким у меня вроде никто не занимался, иначе они будут себе врагами.
Возможно часть вопросов можно отсечь квотированием?
Я думал, но при превышении квоты, когда выключаем комп, то будет выскакивать ошибка типа что профиль не удалось сохранить и т.п
гигабитная сеть решит ваши проблемы
Возможно, а как быть с захламлением диска "C:" многогигабайтными профилями?
Re: Допиливание скрипта
Добавлено: 2011-04-19 10:37:41
kpp
Группирование ярлыков по папкам на рабочем столе - достаточно распространенная практика.
Позволяет навести порядок на рабочем столе.
Re: Допиливание скрипта
Добавлено: 2011-04-19 11:49:54
alex117
Ну как бы то ни было, в моей фирме нет таких пользователей, они даже не знают разницы между файлом/папкой и ссылкой на него.
Ну а как решение этого вопроса, то привести к стандарту имена этих папок с ярлыками и их количество и сделать исключение по типу как вы писали выше.