Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » SH скрипт копирования каталога

Ответить
Настройки темы
SH скрипт копирования каталога

Новый участник


Сообщения: 9
Благодарности: 0


Конфигурация

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt log.txt
(138 байт, 2 просмотров)
Тип файла: txt script.txt
(553 байт, 2 просмотров)

Всем добрый день!

Спасибо за активное участие в вопросе.
Система у меня 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
Благодарности: 73

Профиль | Отправить PM | Цитировать


Цитата AMDBulldozer:
У меня не работает. zsh 4.3.17 »
zsh 5.0.0

-------
Сколько не думай, а лучше водки ничего не придумаешь.


Отправлено: 11:36, 28-10-2012 | #12


Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить PM | Цитировать


ktotut, у Вас в текущем каталоге отсутствует директория "administrator". Поэтому выполнение сценария и прерывается с выдачей Вашего же сообщения об отсутствии дректории. Думаю, Вы это и сами заметили.
Рекомендация: вводите абсолютный путь директории.


P.S. Кстати, почему она называется "TARGET"? Скорее уж "SOURCE". Хотя на работу сценария это, ясен корень, никак не влияет.

Отправлено: 15:33, 28-10-2012 | #13


Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg scr.jpg
(32.2 Kb, 2 просмотров)
Вложения
Тип файла: txt script.txt
(546 байт, 2 просмотров)
Тип файла: txt log.txt
(155 байт, 1 просмотров)

поправил. Директория находится на одном уровне со скриптом, просто допустил ошибку...
однако ничего не изменилось.
Прикладываю файлы.

Отправлено: 16:22, 28-10-2012 | #15


Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить PM | Цитировать


ktotut, опубликуйте, пожалуйста, содержимое файла site.txt.
Как видите, попытка чтения из этого файла завершается неудачно и сценарий сразу выходит из цикла while.

-------
Господа! Убедительная просьба не обращаться за консультациями в ЛС. Поверьте, создать ветку в соответствующем разделе форума гораздо эффективнее.


Отправлено: 16:36, 28-10-2012 | #16


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt site.txt
(51 байт, 3 просмотров)

вот содержание файла site.txt

Отправлено: 17:27, 28-10-2012 | #17


Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить PM | Цитировать


ktotut, у Вас файл site.txt не завершается переводом строки. Отсюда и ошибка - прчесть строку из файла нельзя, поскольку он содержит 0 строк (если не верите, можете проверить командой wc -l site.txt).
Кстати, заодно советовал бы добавить в команду mkdir опцию "-p". На всякий случай.

-------
Господа! Убедительная просьба не обращаться за консультациями в ЛС. Поверьте, создать ветку в соответствующем разделе форума гораздо эффективнее.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:06, 28-10-2012 | #18


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg scr.jpg
(32.3 Kb, 3 просмотров)
Вложения
Тип файла: txt script.txt
(453 байт, 2 просмотров)
Тип файла: txt site.txt
(51 байт, 2 просмотров)

Да, я тоже думал на это - увы нет..вот скрин и файлы.

Отправлено: 19:17, 28-10-2012 | #19


Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить PM | Цитировать


ktotut, тогда выкладывайте очередной log.txt!

Предположение №1: rsync у Вас не установлен, а команда cp не проходит потому, что, несмотря на то, что Вам еще в самом первом сообщении рекомендовали это сделать (не я), Вы забыли заменить "$path" на "$LINE".
Ведь переменная path у Вас нигде не определена, верно?

-------
Господа! Убедительная просьба не обращаться за консультациями в ЛС. Поверьте, создать ветку в соответствующем разделе форума гораздо эффективнее.


Отправлено: 19:33, 28-10-2012 | #20



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » SH скрипт копирования каталога

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход