|
Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » SH скрипт копирования каталога |
|
SH скрипт копирования каталога
|
Новый участник Сообщения: 9 |
Профиль | Отправить PM | Цитировать Добрый день!
Прошу помочь, пишу скрипт копирования целевой папки (внутри папки вложенная структура папок и файлов) в каталоги, список которых перечислен в текстовом файле (каждая строчка - новый каталог с указание пути относительно корня). Однако выполнение скрипта ни к чему не приводит..Помогите пожалуйста. Пример содержимого текстового файла: /home/centrin/domains/sites.ru/public_html/new/ /home/centrin/domains/home.ru/public_html/ Вот sh скрипт: #!/bin/sh if [ $# -ne 2 ] then echo "Параметры вызова: ([директория], [файл с адресами])" exit fi PATHS_FILE=$2 TARGET_DIR=$1 if !([ -d $TARGET_DIR ]) then echo "Заданная директория не найдена" exit fi if !([ -f $PATHS_FILE ]) then echo "Файл с адресами не найден" exit fi while read LINE; do if !([ -d $LINE ]) then mkdir $LINE fi echo "$TARGET_DIR/* to $LINE" cp -R $TARGET_DIR/* $path done < $PATHS_FILE echo "Done." |
|
Отправлено: 17:24, 26-10-2012 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Всем добрый день!
Спасибо за активное участие в вопросе. Система у меня Linux version 2.6.32-5-amd64 (Debian 2.6.32-46) Прикладываю к сообщению log и скрипт (с внесенными изменениями) и вот еще результат команды: root@km35525:/home/centrin/domains/eduoren.ru/public_html# ls -l `which sh` lrwxrwxrwx 1 root root 4 Apr 11 2012 /bin/sh -> bash |
Последний раз редактировалось ktotut, 28-10-2012 в 08:45. Отправлено: 08:34, 28-10-2012 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Странный тип Сообщения: 813
|
Профиль | Отправить PM | Цитировать Цитата AMDBulldozer:
|
|
------- Отправлено: 11:36, 28-10-2012 | #12 |
Ветеран Сообщения: 2029
|
Профиль | Отправить PM | Цитировать ktotut, у Вас в текущем каталоге отсутствует директория "administrator". Поэтому выполнение сценария и прерывается с выдачей Вашего же сообщения об отсутствии дректории. Думаю, Вы это и сами заметили.
Рекомендация: вводите абсолютный путь директории. P.S. Кстати, почему она называется "TARGET"? Скорее уж "SOURCE". Хотя на работу сценария это, ясен корень, никак не влияет. |
Отправлено: 15:33, 28-10-2012 | #13 |
Ветеран Сообщения: 2029
|
Профиль | Отправить PM | Цитировать Теперь по поводу Вашего сценария. Вы всё-аки не до конца внесли те правки, о которых я Вам говорил.
Оператору "if" не нужны круглые скобки. Это не язык "С". Конечно, во многих случаях они не мешают, но раз уж мы с Вами начали учиться писать сценарии, давайте сразу осваивать хороший стиль программирования. Поэтому, убираем скобки в "if ([ ! -d $TARGET_DIR ])". Получается "if [ ! -d $TARGET_DIR ]". Выражение "if !([ ! -f $PATHS_FILE ])" ошибочно в принципе, поскольку содержит ссылку на историю команд (в сценарии она недоступна). Вполне вероятно, что эта команда может быть выполнена в сценарии (именно благодаря недоступности истории команд). Честно признаться, никогда не проверял. Но она совершенно точно не может быть исполнена в интерактивном режиме. Так что заменяем Ваш вариант на простой и понятный "if [ ! -f $PATHS_FILE ]". |
------- Отправлено: 15:50, 28-10-2012 | #14 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать поправил. Директория находится на одном уровне со скриптом, просто допустил ошибку...
однако ничего не изменилось. Прикладываю файлы. |
Отправлено: 16:22, 28-10-2012 | #15 |
Ветеран Сообщения: 2029
|
Профиль | Отправить PM | Цитировать ktotut, опубликуйте, пожалуйста, содержимое файла site.txt.
Как видите, попытка чтения из этого файла завершается неудачно и сценарий сразу выходит из цикла while. |
------- Отправлено: 16:36, 28-10-2012 | #16 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать вот содержание файла site.txt
|
Отправлено: 17:27, 28-10-2012 | #17 |
Ветеран Сообщения: 2029
|
Профиль | Отправить PM | Цитировать ktotut, у Вас файл site.txt не завершается переводом строки. Отсюда и ошибка - прчесть строку из файла нельзя, поскольку он содержит 0 строк (если не верите, можете проверить командой wc -l site.txt).
Кстати, заодно советовал бы добавить в команду mkdir опцию "-p". На всякий случай. |
------- Отправлено: 18:06, 28-10-2012 | #18 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Да, я тоже думал на это - увы нет..вот скрин и файлы.
|
Отправлено: 19:17, 28-10-2012 | #19 |
Ветеран Сообщения: 2029
|
Профиль | Отправить PM | Цитировать ktotut, тогда выкладывайте очередной log.txt!
Предположение №1: rsync у Вас не установлен, а команда cp не проходит потому, что, несмотря на то, что Вам еще в самом первом сообщении рекомендовали это сделать (не я), Вы забыли заменить "$path" на "$LINE". Ведь переменная path у Вас нигде не определена, верно? |
------- Отправлено: 19:33, 28-10-2012 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Скрипт копирования баз | Goodkid | Скриптовые языки администрирования Windows | 9 | 29-04-2013 17:14 | |
CMD/BAT - Скрипт копирования по сети | Forpost | Скриптовые языки администрирования Windows | 1 | 21-06-2010 17:06 | |
Разное - Скрипт резервного копирования | dividik | Microsoft Windows 2000/XP | 10 | 27-01-2009 12:45 | |
Прочие - Программа (скрипт) удаление из заданного каталога заданных файлов | __sa__nya | Программное обеспечение Windows | 1 | 20-11-2008 19:02 | |
Скрипт каталога ссылок Links 2 | aist1 | Вебмастеру | 4 | 06-12-2005 01:26 |
|