URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8671
[ Назад ]

Исходное сообщение
"Пожалуйста помогите написать Shell скрипт."

Отправлено hiddensy , 01-Апр-10 20:20 
Здраствуйте ALL.

Помогите пожалуйста написать скрипт. Суть скрипта в следуещем.
1. Есть папка в ней много файлов, необходимо выбрать из данной папки один случайный файл.
2. Есть другая папка, в которую выбранный файл нужно перенести.
3. Скрипт вешается в Cron и выполняется каждые 3 часа

Подскажите кодом, программировать под FreeBSD не очень умею еще.


Содержание

Сообщения в этом обсуждении
"Пожалуйста помогите написать Shell скрипт."
Отправлено аноним , 01-Апр-10 23:20 
вот от этого можно отталкиваться (на свежем bash точно работает):
list=`find /var/log -type f`; file=`echo "$list"|sed $((RANDOM%\`echo "$list"|wc -l\`))\!d`; echo mv "$file" /where/to/move

/var/log в данном примере это "папка в которой много файлов", /where/to/move - это "другая папка" в вашей терминологии

пример работы:

$ list=`find /var/log -type f`; file=`echo "$list"|sed $((RANDOM%\`echo "$list"|wc -l\`))\!d`; echo mv "$file" /where/to/move
mv /var/log/auth.log.2.bz2 /where/to/move
$ list=`find /var/log -type f`; file=`echo "$list"|sed $((RANDOM%\`echo "$list"|wc -l\`))\!d`; echo mv "$file" /where/to/move
mv /var/log/utx.lastlogin /where/to/move
$ list=`find /var/log -type f`; file=`echo "$list"|sed $((RANDOM%\`echo "$list"|wc -l\`))\!d`; echo mv "$file" /where/to/move
mv /var/log/sendmail.st.6 /where/to/move
$

для того, чтоб этот набор команд начал работать уберите echo перед mv (с echo это можно назвать тестовым вариантом)

при внесении данного скрипта в crontab возможно потребудется указать полные пути к бинарникам


"Пожалуйста помогите написать Shell скрипт."
Отправлено hiddensy , 02-Апр-10 13:52 
>при внесении данного скрипта в crontab возможно потребудется указать полные пути к
>бинарникам

Спасибо за пример, буду разбираться дальше


"Пожалуйста помогите написать Shell скрипт."
Отправлено phpcoder , 02-Апр-10 14:01 
>1. Есть папка в ней много файлов, необходимо выбрать из данной папки
>один случайный файл.

Предлагаю так:

find . -type f | shuf | head -1

или:

find . -type f | sort -R | head -1


"Пожалуйста помогите написать Shell скрипт."
Отправлено Andrey Mitrofanov , 02-Апр-10 14:20 
>| shuf | head -1

|shuf -n1
fixed.