- Перемещение файлов и update, vic, 13:12 , 25-Июн-07 (1)
>Здравствуйте, >Помогите написать скрипт для перемещения файлов из директории в другую директорию. >А конкретно, есть папка куда постоянно копируются файлы из инета. Их мне >нужно перемещать в другую папку. И если файл перемещен, то сделать >insert в Oracle (имя файла и путь к нему). Скрипт желателен >на shell, perl или С/C++ >Спасибо. В никсах принято называть каталогами, а не папками :) Вот к примеру написал по памяти не вылезая из броузера: #!/bin/bash #каталог куда из инета копируются файлы SOURCE_PATH=/path/from/www #каталог куда перемещаем TARGET_PATH=/path/to/bunker # Для всех файлов что есть в каталоге for i in $SOURCE_PATH/* do FILENAME=`basename $i` # копируем куда надо, если не скопируется то в stdout будет соответсвующий спам mv $i $TARGET_PATH/$FILENAME # если скопировали удачно, то if [ $? == 0 ] then # то пишим в базу RES=`sqlplus login/password@database <<EOF insert into megatable (name, path) values ('$FILENAME', '$TARGET_PATH'); exit EOF` # отписываемся о результате инсерта в stdout [ echo $RES | grep '1 row created' ] || echo "Error!" && echo "OK" fi done Проблемы: неизвестно когда запускается скрипт, т.е. если в момент копирования из инета будет запущен скрипт, то будет конфликт - скрипт переместит файл в который производится запись - будет злой облом. Кто-то должен разрулить эту ситуацию т.е. должен быть признак что файл полностью скопирован из инета.
- Перемещение файлов и update, Ищущий ответы, 13:26 , 25-Июн-07 (2)
>>Здравствуйте, >>Помогите написать скрипт для перемещения файлов из директории в другую директорию. >>А конкретно, есть папка куда постоянно копируются файлы из инета. Их мне >>нужно перемещать в другую папку. И если файл перемещен, то сделать >>insert в Oracle (имя файла и путь к нему). Скрипт желателен >>на shell, perl или С/C++ >>Спасибо. >Проблемы: >неизвестно когда запускается скрипт, т.е. если в момент копирования из инета будет >запущен скрипт, то будет конфликт - скрипт переместит файл в который >производится запись - будет злой облом. Кто-то должен разрулить эту ситуацию >т.е. должен быть признак что файл полностью скопирован из инета. Именно по этой причине я и завел эту тему, т.к.как раз эта проблема меня и интересует. Есть идеи?
- Перемещение файлов и update, NuINu, 13:40 , 25-Июн-07 (3)
>>>Здравствуйте, >>>Помогите написать скрипт для перемещения файлов из директории в другую директорию. >>>А конкретно, есть папка куда постоянно копируются файлы из инета. Их мне >>>нужно перемещать в другую папку. И если файл перемещен, то сделать >>>insert в Oracle (имя файла и путь к нему). Скрипт желателен >>>на shell, perl или С/C++ >>>Спасибо. > >>Проблемы: >>неизвестно когда запускается скрипт, т.е. если в момент копирования из инета будет >>запущен скрипт, то будет конфликт - скрипт переместит файл в который >>производится запись - будет злой облом. Кто-то должен разрулить эту ситуацию >>т.е. должен быть признак что файл полностью скопирован из инета. > >Именно по этой причине я и завел эту тему, т.к.как раз эта >проблема меня и интересует. >Есть идеи? программа копирующая файл из инета должна создавать лок файл, во время работы, и удалять его по завершению, скрипт его проверяет. делов то.
- Перемещение файлов и update, vic, 13:55 , 25-Июн-07 (4)
>программа копирующая файл из инета должна создавать лок файл, во время работы, >и удалять его по завершению, скрипт его проверяет. >делов то. нафик)) пусть вместо лока по завершению копирования сама переместит куда надо файл и пропишет в базу инсерт :) Встречный вопрос - как и что за прога копирует из нета? это скрипт? ее можно изменить или нет? Зная это можно генерить идеи близкие к жизни :)
- Перемещение файлов и update, Ищущий ответы, 14:39 , 25-Июн-07 (5)
>>программа копирующая файл из инета должна создавать лок файл, во время работы, >>и удалять его по завершению, скрипт его проверяет. >>делов то. > >нафик)) пусть вместо лока по завершению копирования сама переместит куда надо файл >и пропишет в базу инсерт :) > >Встречный вопрос - как и что за прога копирует из нета? это >скрипт? ее можно изменить или нет? Зная это можно генерить идеи >близкие к жизни :) знаю только, что файлы заливает система стороней организации. можно-ли вносить изменения в их систему - не знаю (
- Перемещение файлов и update, NuINu, 14:51 , 25-Июн-07 (6)
>>>программа копирующая файл из инета должна создавать лок файл, во время работы, >>>и удалять его по завершению, скрипт его проверяет. >>>делов то. >> >>нафик)) пусть вместо лока по завершению копирования сама переместит куда надо файл >>и пропишет в базу инсерт :) >> >>Встречный вопрос - как и что за прога копирует из нета? это >>скрипт? ее можно изменить или нет? Зная это можно генерить идеи >>близкие к жизни :) >знаю только, что файлы заливает система стороней организации. >можно-ли вносить изменения в их систему - не знаю ( А система эта физически где расположена? на твоем сервере или где то в инете?(может она вам по какому стандартному протоколу файлы сливает?) если так надо знать имя юзера под которым она работает, и запускать твой скрипт только тогда когда этого юзера нету в системе.
- Перемещение файлов и update, Ищущий ответы, 15:18 , 25-Июн-07 (7)
>А система эта физически где расположена? на твоем сервере или где >то в инете?(может она вам по какому стандартному протоколу файлы сливает?) > >если так надо знать имя юзера под которым она работает, и запускать >твой скрипт только тогда когда этого юзера нету в системе. она расположена где-то в инете файлы копируются по scp. А не может случиться так, что на момент проверки пользователя скриптом - его не было, но после начала копирования он (пользователь) вдруг появляется и начинает дополнительно заливать файлы?
- Перемещение файлов и update, Ищущий ответы, 15:24 , 25-Июн-07 (8)
хотя тут мне сообщили что shell не даст скопировать недокаченный файл, типа он сам его локирует. Это действительно так?
- Перемещение файлов и update, vic, 16:08 , 25-Июн-07 (11)
>хотя тут мне сообщили что shell не даст скопировать недокаченный файл, типа >он сам его локирует. Это действительно так? Нет конечно 1. линух(никсы) не винда, и не имеет moderate access к файлам. 2. shell ваще файлы не копирует, копирует утилита cp (в вашем случае scp). 3. файл удалить не вопрос т.к. при этом стирается запись из каталога (каталог это тоже файл), писатель и дальше будет писать т.к. дескриптор в процессе останется открытым и после окончания записи и закрытия дескриптора файл исчезнет уже физически (т.к. количество ссылок на inode файловой системы станет = 0. В вашем случае видимо надо в скрипте анализировать вывод утилиты lsof перед перемещением и перемещать только файлы для которых нет открытых дескрипторв. Еще вариант - просто перемещаем файлы. Невзирая на то пишут их или нет :) Что прозойдет? для полностью скопированного файла все ок. для неполностью скопированного файла - mv (или rename) перенесет файл в другой каталог при этом запись в него будет продолжаться (уже в новом каталоге!), т.к. дескриптор открыт. Останется только решить критично ли то что может сложиться ситуация что после insert в базу копируемого в данный момент файла может случиться абзац в сети и файл недокачается уже по причинам в сети? Вышеописанный фокус с переносом открытого файла в который идет запись работает только если оба каталога находятся в одной файловой системе, на одном диске. Иначе mv (rename) вынуждена будет именно полностью переносить файл, а не перемещать запись из одного каталога в другой. p.s. ну и эксперимент с scp нужен т.к. не наю я как он себя ведет.. cp вот не ругается=) уф... =)
- Перемещение файлов и update, Ищущий ответы, 16:41 , 25-Июн-07 (12)
прставил эксперимент: запустил копирование по scp большого файла, и запустил скрипт. Файл со старого места удалился, и появился урезанным в новом месте, но этот файл продолжал докачиваться в уже новое место. ))
- Перемещение файлов и update, NuINu, 17:19 , 25-Июн-07 (13)
>прставил эксперимент: >запустил копирование по scp большого файла, и запустил скрипт. >Файл со старого места удалился, и появился урезанным в новом месте, но >этот файл продолжал докачиваться в уже новое место. )) так тебе ж сказали что это будет, если мв будет в пределах одного физического носителя. что далеко не всегда бывает.(решение какое то не особо маштабируемое получатеся)
- Перемещение файлов и update, vic, 17:32 , 25-Июн-07 (14)
>(решение какое то не особо маштабируемое получатеся) Плохое решение построенное на нюансах(( Следует смотреть в сторону изменения клиента: сам закачал - сам записал в базу. Или хотя бы сменил имя файлу после закачки (это можно будет безболезненно детектить далее). Если есть возможность клиента изменять..
- Перемещение файлов и update, NuINu, 15:38 , 25-Июн-07 (9)
>>А система эта физически где расположена? на твоем сервере или где >>то в инете?(может она вам по какому стандартному протоколу файлы сливает?) >> >>если так надо знать имя юзера под которым она работает, и запускать >>твой скрипт только тогда когда этого юзера нету в системе. > >она расположена где-то в инете >файлы копируются по scp. >А не может случиться так, что на момент проверки пользователя скриптом - >его не было, но после начала копирования он (пользователь) вдруг появляется >и начинает дополнительно заливать файлы? верно мыслишь, может! :) может ему на это время запретить регистрироваться? а на счет того что "оболочка недаст" я что то не уверен. не дело это оболочки.
- Перемещение файлов и update, NuINu, 15:51 , 25-Июн-07 (10)
>>А система эта физически где расположена? на твоем сервере или где >>то в инете?(может она вам по какому стандартному протоколу файлы сливает?) >> >>если так надо знать имя юзера под которым она работает, и запускать >>твой скрипт только тогда когда этого юзера нету в системе. > >она расположена где-то в инете >файлы копируются по scp. >А не может случиться так, что на момент проверки пользователя скриптом - >его не было, но после начала копирования он (пользователь) вдруг появляется >и начинает дополнительно заливать файлы? я ман посмотрел по scp уж больно у нее набор команд ограничен. лучше бы sftp использовали. тогда и файл блокировки легко бы можно было добавлять и удалять. а можно перед началом сессии копирования добавить в их программу(если уж не менять scp) заход на ваш сервер и создания блока по ssh и по окончании сессии scp еще раз но уже снятие блока. т.е часть ответственности за правильное копирование перенести на их сторону. а то фигли? они копируют а вас полная каша.
- Перемещение файлов и update, perece, 16:43 , 26-Июн-07 (16)
>>Проблемы: >>неизвестно когда запускается скрипт, т.е. если в момент копирования из инета будет >>запущен скрипт, то будет конфликт - скрипт переместит файл в который >>производится запись - будет злой облом. Кто-то должен разрулить эту ситуацию >>т.е. должен быть признак что файл полностью скопирован из инета. > >Именно по этой причине я и завел эту тему, т.к.как раз эта >проблема меня и интересует. >Есть идеи? тут как-то была темка насчет использования lsof/fuser для детекта "недокачаных" как раз такая же проблема решалась нашел: https://www.opennet.ru/openforum/vsluhforumID9/6478.html\^P^/
- Перемещение файлов и update, rad87, 14:34 , 26-Июн-07 (15)
>Вот к примеру написал по памяти не вылезая из броузера: >#!/bin/bash >#каталог куда из инета копируются файлы >SOURCE_PATH=/path/from/www >#каталог куда перемещаем >TARGET_PATH=/path/to/bunker > ># Для всех файлов что есть в каталоге >for i in $SOURCE_PATH/* >do > FILENAME=`basename $i` > > # копируем куда надо, если не скопируется то в stdout >будет соответсвующий спам > mv $i $TARGET_PATH/$FILENAME > > # если скопировали удачно, то > if [ $? == 0 ] then > ># то пишим в базу >RES=`sqlplus login/password@database <<EOF >insert into megatable (name, path) values ('$FILENAME', '$TARGET_PATH'); >exit >EOF` > ># отписываемся о результате инсерта в stdout >[ echo $RES | grep '1 row created' ] || echo "Error!" >&& echo "OK" > > fi >done Подскажите пожалуйста , как можно обработать файлы если они лежат не на первом уровне, а во вложенных папках т.к for i in $SOURCE_PATH/* ищет только на первом уровне. Командой "find /" я воспользоваться не смог так как он часто выдаёт "ошибку сегментирования" да и после for i in `find $SOURCE_PATH `; команда 'echo $i' выдаёт мне каждое слово по отдельности, а не путь к файлу
- Перемещение файлов и update, vic, 20:05 , 26-Июн-07 (17)
>Командой "find /" я воспользоваться не смог так как он > часто выдаёт "ошибку сегментирования" офигеть, это что же надо сделать чтобы программа которой уже лет 30 падает?>for i in `find $SOURCE_PATH `; команда 'echo $i' выдаёт мне каждое слово по >отдельности, а не путь к файлу у мя работает и нормально выдает полные пути: SOURCE_PATH=/home/me for i in `find $SOURCE_PATH` do echo $i done кста, какая система? давайте скрипт, посмотрим :).
- Перемещение файлов и update, rad87, 11:07 , 27-Июн-07 (19)
>кста, какая система? >давайте скрипт, посмотрим :). #!/bin/bash SOURCE_PATH=/exports/DVD-9
# Для всех файлов что есть в каталоге for i in `find $SOURCE_PATH`; do echo 'файл' $i FILENAME=`basename $i` COUNT=` echo $FILENAME| wc -c` # echo 'количество символов' $COUNT if [ "$COUNT" -gt 100 ]; then NewName=${FILENAME:0:90} echo 'Новое имя' $NewName fi done Задача такая Найти все файлы в каталоге (рекурсивно) и если длина из имени больше 100 символов обрезать их до 90 символов Проблема в том что я не могу перебрать все файлы, т.к. for i in `find $SOURCE_PATH`; мне в переменную i заганяет каждое слово в пути к файлу отдельно. ЗЫ Mandriva 2007
- Перемещение файлов и update, jd, 02:03 , 28-Июн-07 (20)
>Проблема в том что я не могу перебрать все файлы, т.к. > for i in `find $SOURCE_PATH`; мне в >переменную i заганяет каждое слово в пути к файлу отдельно. Используйте следующую конструкцию: find "$SOURCE_PATH" | while read i; do #... при обращении к $i берите её в кавычки done Или как посоветовали ниже, используйте find -exec.
- Перемещение файлов и update, perece, 20:18 , 26-Июн-07 (18)
>`find $SOURCE_PATH `; команда 'echo $i' выдаёт мне каждое слово по >отдельности, а не путь к файлу у вас пробелы в именах файлов? попробуйте конструкцию find -exec ...\^P^/
|