LINUX.ORG.RU

Bash sript работа с файлом

 ,


1

2

Ситуация такая: копируются один файл в папку, а скрипт после окончания копирования должен его положит в другое место. На данный момент у меня получается так, как только появляется файл скрипт копирует чать этого файла в указанную папку. Подскажите пожалуста какой командой можно проверить файл на «закрытость/или возможность использования».

https://github.com/gregghz/Watcher
Умеет следить за действиями с файлами в определенном каталоге и выполнять нужный скрипт. Тебе нужно при закрытии файла на запись

xorik ★★★★★
()

Подскажите пожалуста какой командой можно проверить файл на «закрытость/или возможность использования».

lsof

IvS
()

Подскажите пожалуста какой командой можно проверить файл на «закрытость/или возможность использования».

вообще говоря никакой в общем случае. Потому например сжиматели вроде gzip недоделанные файлы делают с правами 0600, а после окончания сжатия меняют на нужные права, например на 0644. А например sed делает временный файл с точкой вначале, а когда обработает, переименовывает файл как надо (а старый удаляет).

emulek
()

Если имя файла известно то можно написать цикл с проверкой файла на изменённость. Что-то типа:

function filecopy () {
filemame="$1"
path="$2"
while true ; do 
 var1=`ll $filemame | sed 's/.*(дата изменения файла).*/\1/g'`
 sleep 1
 var2=`ll $filemame | sed 's/.*(дата изменения файла).*/\1/g'`
 if (( var1 = var2 )) ; then cp $filemame $path/$filename && break ; fi
done
}

...

filecopy filemame path
zzdnx ★★
()
Последнее исправление: zzdnx (всего исправлений: 4)

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

Krieger_Od ★★
()
Ответ на: комментарий от zzdnx
$ ll *xt
-rw-r--r-- 1 rem rem 25 мая   29 11:19 sd.txt
$ echo "">>sd.txt
$ ll *xt
-rw-r--r-- 1 rem rem 26 мая   29 17:38 sd.txt
$ ll *xt | cut -d " " -f 5-10
26 мая   29 17:38
zzdnx ★★
()
Ответ на: комментарий от anonymous

линуксоид ты наш доморощенный, по делу что-нить скажешь?

emulek
()
Ответ на: комментарий от Frakhtan-teh

Идея хорошая, но не работает.

К сожалению это показывает не только моя практика и вообще, "... о Боже! Сколько шишек я набил, пока не понял сути..."

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

zzdnx ★★
()
Последнее исправление: zzdnx (всего исправлений: 1)
Ответ на: комментарий от sdio

Я не плохо пишу на баше и при конвеерных операциях осторожничаю как с ||, так и с && и циклами типа «while true ...» не говоря уже о локали и экранировании переменных. Проблемы, в основном, бывают из-за сетевой активности над объектом бэкапа.

Вообще, правильнее сделать отправку с клиента на сервер отмашки типа: «всё, я закончил, можешь копировать», а сервер в ответ на это делает файлу (или всему каталогу) RO на время копирования.

zzdnx ★★
()

busybox inotifyd, событие w (Writable file is closed)

devl547 ★★★★★
()

самый верный способ - копировать скриптом, в котором будет, собственно, копирование, и сигнал для другого скрипта о начале перемещения
Дерзай.

reprimand ★★★★★
()
Ответ на: комментарий от sdio

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

zzdnx ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.