Скрипт для копирования, удаления и перемещения файлов.

Скрипты PHP, PERL и т.п. помогающие управлять сетью

Скрипт для копирования, удаления и перемещения файлов.

Сообщение Андрей » 22 май 2009, 07:18

Приветствую всех.
Поделитесь скриптом по сабжу.
вот из личных налаботок:
Код: Выделить всё
# cat test.sh
#!/bin/sh
find /root/billtest/1 /\(-name "*.txt" \) -print -exec rm -rf {}\

но почему-то при выполнении скрипта получаю такой бред:
Код: Выделить всё
# ./test.sh
find: -exec: no terminating ";" or "+"

опять же если не выполнять из файла, то все проходит нормально.

Заранее всем благодарен.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Скрипт для копирования, удаления и перемещения файлов.

Сообщение root » 22 май 2009, 11:17

вот пример, удаление файлов старше указанной даты:
Код: Выделить всё
/usr/bin/find /var/ftp -type f -mtime +30d -delete
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Скрипт для копирования, удаления и перемещения файлов.

Сообщение Андрей » 25 май 2009, 20:38

спасибо. аналог я в принципе написал, только времени выложить времени не было.
Код: Выделить всё
#Удаляет все файлы в заранее указанной директории старше 10 минут:
find /path/to_file/ -type f -mmin +10 -print -exec rm -f {} \;
# Удаляет все файлы в заранее указанной директории старше 10 дней:
find /path/to_file/ -type f -mtime +10 -print -exec rm -f {} \;
#удаляет все файлы в указанной директории имя которых оканчивается на .txt:
find /path/to_file/ -name "*.txt" -print -exec rm -f {} \;

сейчас пытаюсь поставить некую систему копирования файлов на другой ПК. только минусы есть.
Тему я создавал, когда хотел по nfs копировать, но почитав форумы и поковыряв инет понял, что nfs не очень хороший вариант. Поэтому решил использовать scp (для тех кто не знает - это защищенное копирование файлов по ssh) только опять ряд гадостей, как обычно - не все гладно. В ряд папок имеет доступ только рут и больше никто, если права изменить, то система считает что целостность нарушена и начинает страдать фингей (бекапы не делает). Поэтому по scp я планирую забирать те файлы, которые я буду копировать локально на самой машине, а потом удалять их с нее же.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Скрипт для копирования, удаления и перемещения файлов.

Сообщение Андрей » 26 май 2009, 07:59

Удалять просто, а вот скопировать - не смог.

ткните носом в ошибку:
Код: Выделить всё
find /usr/local/asdf/backup/ -type f -mtime +3 -print -exec cp /usr/local/asdf/backup/*.gz /usr/home/admin/back \;

Мой программерское чутье подсказывает, что -exec cp /usr/local/asdf/backup/*.gz /usr/home/admin/back крутится в цикле find /usr/local/asdf/backup/ -type f -mtime +3 -print. Т.е. пока в папке /usr/local/asdf/backup/ обнаруживаются файлы старше 3х дней - копировать gz-архивы в другую диру. Нашелся файл - копируем все эти, еще файл - снова копируем. Подскажите, как уйти от этого.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Скрипт для копирования, удаления и перемещения файлов.

Сообщение lehisnoe » 26 май 2009, 10:07

Во-первых, объясни мне, плиз, почему ты в своем ответе используешь {}, а тут вдруг решил использовать *.gz?
man (1) find писал(а):If the
string ``{}'' appears anywhere in the utility name or the argu-
ments it is replaced by the pathname of the current file.

Решение твоей проблемы:
Код: Выделить всё
find /usr/local/asdf/backup/ -type f -mtime +3 -print -exec cp {} /usr/home/admin/back \;

Во-вторых, а нафига такие сложности-то? Раз в сутки МУВИТЬ *.gz в нужную диру и все, никаких тебе поисков не нужно будет.
No users
No troubles
No money
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
lehisnoe
Site Admin
 
Сообщения: 539
Зарегистрирован: 11 июн 2008, 14:09
Откуда: Moscow

Re: Скрипт для копирования, удаления и перемещения файлов.

Сообщение Андрей » 26 май 2009, 10:33

Во-вторых, а нафига такие сложности-то? Раз в сутки МУВИТЬ *.gz в нужную диру и все, никаких тебе поисков не нужно будет.

мдя.
но за ответ спасибо.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Скрипт для копирования, удаления и перемещения файлов.

Сообщение Андрей » 27 май 2009, 09:54

ну вот. Написл я скриптик, сунул в крон его, а он работать не хочет.
Код: Выделить всё
$cd /usr/home/admin/bin
$ls
0000    0700
$./0000

Дальше описывать не стал, но этот скрипт вызывает kernel_panic.
Вот его содержимое:
Код: Выделить всё
`scp -r tos@10.10.0.2:/usr/local/netflow/em0 /stat/backflow/`
`scp -r tos@10.10.0.2:/usr/local/netflow/ng /stat/backflow/`


это записано в кроне:
Код: Выделить всё
25      9       *       *       *       admin   /usr/home/admin/bin/0000

хотел чтобы скрипт запускался каждый день в 1:00, но так-как он не запустился в указанное время, то утром я сменил время на 9:25.
подскажите в чем проблема.
После того как был kernel_panic у меня проверялся диск на 1 ТБ.

ЗЫ. файл 0000 исполняемый.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Скрипт для копирования, удаления и перемещения файлов.

Сообщение Андрей » 28 май 2009, 07:20

В целом я разобрался.
Kernel_panic был вызван могочисленным отказом ssh в авторизации, т.к. права доступа для пользователя tos были у root.
То, что скрипт не выполнялся - я сам понять не могу почему. И пути правильные и права 777 выставлены. Через некоторое время начинает выполняться.
Последний раз редактировалось Андрей 22 июн 2009, 09:49, всего редактировалось 1 раз.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Скрипт для копирования, удаления и перемещения файлов.

Сообщение root » 28 май 2009, 12:15

в скриптах нужно использовать абсолютные пути до команд
т.е. не
Код: Выделить всё
scp бла бла бла

а с полным путем:
Код: Выделить всё
/usr/bin/scp бла бла бла

и так для всех команд

Андрей писал(а):хотел чтобы скрипт запускался каждый день в 1:00

Код: Выделить всё
0       1       *       *       *       root    /usr/home/admin/bin/0000


Андрей писал(а):Вот его содержимое:

почему в начале не указан интерпретатор ?
что это ? shell ? perl ? php ?

вот пример:
Код: Выделить всё
#!/bin/sh
/usr/bin/scp -r tos@10.10.0.2:/usr/local/netflow/em0 /stat/backflow/
/usr/bin/scp -r tos@10.10.0.2:/usr/local/netflow/ng /stat/backflow/

в начале четко указано каким интерпритатором выполнять данный скрипт
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Скрипт для копирования, удаления и перемещения файлов.

Сообщение Андрей » 28 май 2009, 18:16

почему в начале не указан интерпретатор ?
что это ? shell ? perl ? php ?

А разве обязательно? я использую вызов приложений, а не операторы интерпретаторов.

Без полных путей написал - в принципе работает.
Единственное, что хочу отметить - это что кроме знаков пробела (32 символ) в файле следует учесть переход на новую строку. Таким образом я установил, что содержимое файла как:
Код: Выделить всё
scp ... ... ... ...

не тоже самое, что
Код: Выделить всё
scp ... ... ... ...


в первом случае, если отсутствует переход на новую строку. то скрипт выполняться не будет. Легко ввести себя в заблуждение утверждением, что "Ну команда в консоли же выполняется". Выполняется, но в файле надо ставить переход на новую строку.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область


Вернуться в Программинг и сети

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10