Допиливание скрипта

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
alex117
ст. сержант
Сообщения: 377
Зарегистрирован: 2010-07-30 13:25:13

Допиливание скрипта

Непрочитанное сообщение alex117 » 2011-04-14 8:10:23

Добрый день.
Есть домен на 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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
unix-admin
ст. сержант
Сообщения: 324
Зарегистрирован: 2010-11-26 12:43:04
Откуда: Cornucopia

Re: Допиливание скрипта

Непрочитанное сообщение unix-admin » 2011-04-14 9:05:21

find /path_to_search_dir -type f ! -iname "*.lnk" -exec mv {} /path_to_dst_dir \;

Аватара пользователя
unix-admin
ст. сержант
Сообщения: 324
Зарегистрирован: 2010-11-26 12:43:04
Откуда: Cornucopia

Re: Допиливание скрипта

Непрочитанное сообщение unix-admin » 2011-04-14 12:31:27

вот так будет правильнее:

Код: Выделить всё

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'

Аватара пользователя
alex117
ст. сержант
Сообщения: 377
Зарегистрирован: 2010-07-30 13:25:13

Re: Допиливание скрипта

Непрочитанное сообщение alex117 » 2011-04-14 15:22:35

спасибо, попробую.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Допиливание скрипта

Непрочитанное сообщение kpp » 2011-04-15 11:46:26

Если немного привести к читабельному виду, и записав скрипт в файл:
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.Однозначно возникнет ситуация, когда в каталоге куда, переносятся файлы пользователя, уже будут файлы с такими именами.
Что делать в этом случае?
-Перезаписывать новыми?
-Оставлять старые, при этом удалять или оставлять одноименные файлы на рабочем столе?
-Сохранять все одноименные файлы, генерируя уникальное имя или сохранять каждый рабочий день пользователя в свой каталог с названием - дата?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

FiL
ст. лейтенант
Сообщения: 1374
Зарегистрирован: 2010-02-05 0:21:40

Re: Допиливание скрипта

Непрочитанное сообщение FiL » 2011-04-15 21:58:41

А зачем оно вообще надо?
может сделать один раз
ln -s /home/$user/$dir/ /home/$user/.msprofile/Рабочий стол
и пускай юзверь сразу все складывает туда...

Хотя если это по-любому тот-же раздел диска, то смысла в подобных извратах всё равно не вижу. Какая разница где у юзера доки лежат. Что за желание контролировать что у юзера на десктопе. Пускай делает как ему удобнее. Это ЕГО десктоп.

Аватара пользователя
alex117
ст. сержант
Сообщения: 377
Зарегистрирован: 2010-07-30 13:25:13

Re: Допиливание скрипта

Непрочитанное сообщение alex117 » 2011-04-19 8:13:15

А зачем оно вообще надо?
А я сейчас поясню зачем. Когда у юзера 8Гб на рабочем столе и он работает за одной и той же машиной, то проблем нет, при входе/выходе из системы с профилем на сервере синхронизируется незначительный объем данных, а когда человек садится за другой комп, и заходит первый раз в систему, где еще нет его локального профиля, то пока все эти 8Гб не выкачаются на клиентский комп, он не войдет в систему. Это занимает много времени, начинаются жалобы типа "Почему у меня комп тупит?" и прочее. Аналогичная ситуация будет в том случае, если юзер сохранил файл, скажем 4Гб на рабочий стол и делает выход из системы. Профиль опять синхронизируется с копией на сервере и соостветственно пока эти долбанные 4Гб не закачаются на сервер, то комп не выключится, а когда это все одновременно происходит на 50 рабочих местах, утром или вечером при входе/выходе из сеанса, то возникают, мягко говоря, небольшие тормоза.
может сделать один раз
ln -s /home/$user/$dir/ /home/$user/.msprofile/Рабочий стол
и пускай юзверь сразу все складывает туда..
Соответственно не поможет (читай пост выше)

Аватара пользователя
alex117
ст. сержант
Сообщения: 377
Зарегистрирован: 2010-07-30 13:25:13

Re: Допиливание скрипта

Непрочитанное сообщение alex117 » 2011-04-19 8:21:08

Несколько наводящих вопросов\уточнений к задаче:
1.В общем случае понадобится не переносить не только файлы "*.lnk", а еще, к примеру, "*.pif" или вообще по маске.
2.В общем случае на рабочем столе пользователя могут быть и папки\каталоги, что с ними делать и делать ли?
3.Однозначно возникнет ситуация, когда в каталоге куда, переносятся файлы пользователя, уже будут файлы с такими именами.
Что делать в этом случае?
-Перезаписывать новыми?
-Оставлять старые, при этом удалять или оставлять одноименные файлы на рабочем столе?
-Сохранять все одноименные файлы, генерируя уникальное имя или сохранять каждый рабочий день пользователя в свой каталог с названием - дата?
Только "*.lnk", все папки и файлы должны убираться со стола. Т.к пользователь был предупрежден, что на рабочем столе ничего не должно храниться, то допускается и перезапись при существовании файлов. Тем более недавно поднял Bacula, так что есть ежедневные инкрементные копии профилей. Если каждый день генерировать новые имена файлов, то через пару недель диск с /home будет трещать по швам.

Аватара пользователя
alex117
ст. сержант
Сообщения: 377
Зарегистрирован: 2010-07-30 13:25:13

Re: Допиливание скрипта

Непрочитанное сообщение alex117 » 2011-04-19 8:31:05

Там чуток подправить надо, наверное
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, который у меня работает в сети, на полный бэкап вместо инкрементного.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Допиливание скрипта

Непрочитанное сообщение Alex Keda » 2011-04-19 8:35:07

гигабитная сеть решит ваши проблемы
Убей их всех! Бог потом рассортирует...

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Допиливание скрипта

Непрочитанное сообщение kpp » 2011-04-19 9:55:54

2 alex117
Еще вопросы.
В каталогах на рабочем столе могут быть сгруппированы ярлыки. Как поступать с такими каталогами?
В моем посте http://forum.lissyara.su/viewtopic.php? ... 73#p292253 скрипт только для файлов.
Для каталогов нужно думать с учетом всех моментов. Жестко переносить каталоги с ярлыками не считаю хорошим решением.
Ну и пользователь может обозвать 8-ми гиговый файл *.lnk - думаю нужно и размер файлов мониторить, а не только расширение.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Допиливание скрипта

Непрочитанное сообщение kpp » 2011-04-19 10:03:06

Возможно часть вопросов можно отсечь квотированием?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
alex117
ст. сержант
Сообщения: 377
Зарегистрирован: 2010-07-30 13:25:13

Re: Допиливание скрипта

Непрочитанное сообщение alex117 » 2011-04-19 10:27:52

Для каталогов нужно думать с учетом всех моментов. Жестко переносить каталоги с ярлыками не считаю хорошим решением.
Ну и пользователь может обозвать 8-ми гиговый файл *.lnk - думаю нужно и размер файлов мониторить, а не только расширение.
Таким у меня вроде никто не занимался, иначе они будут себе врагами.
Возможно часть вопросов можно отсечь квотированием?
Я думал, но при превышении квоты, когда выключаем комп, то будет выскакивать ошибка типа что профиль не удалось сохранить и т.п
гигабитная сеть решит ваши проблемы
Возможно, а как быть с захламлением диска "C:" многогигабайтными профилями?

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Допиливание скрипта

Непрочитанное сообщение kpp » 2011-04-19 10:37:41

Группирование ярлыков по папкам на рабочем столе - достаточно распространенная практика.
Позволяет навести порядок на рабочем столе.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
alex117
ст. сержант
Сообщения: 377
Зарегистрирован: 2010-07-30 13:25:13

Re: Допиливание скрипта

Непрочитанное сообщение alex117 » 2011-04-19 11:49:54

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