The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Помогите с перемещением файлов"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Помогите с перемещением файлов"  
Сообщение от mxmedia email on 12-Май-08, 14:21 
подскажите, пожалуйста, что я делаю не так:

#!/bin/sh
$TMPFILE="log.txt"
cat ./$TMPFILE | sed -e "s|[^/]*/||g" |
while read text;do
mv $text $ENGINEDIR
done

результатом вываливаются ошибки о не существовании файлов...

перед mv $text $ENGINEDIR ставил echo "$text $ENGINEDIR" дабы убедиться в наличии дааных в переменных... выдавало только вторую($ENGINEDIR).
так же пробовал ставить (все там же, перед mv $text $ENGINEDIR)
echo "$text"
echo "$ENGINEDIR"

выдает содержимое нормально...

и сам вопрос: как правильно прописать 2 переменные в одной строке?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Помогите с перемещением файлов"  
Сообщение от phpcoder email(??) on 12-Май-08, 14:29 
>подскажите, пожалуйста, что я делаю не так:
>
>#!/bin/sh
>$TMPFILE="log.txt"
>cat ./$TMPFILE | sed -e "s|[^/]*/||g" |
>while read text;do
> mv $text $ENGINEDIR
>done

Возможно, что у вас после обработки sed'ом в некоторых случаях остаётся пустая строка?

Тогда можно сделать так:

-mv $text $ENGINEDIR
+if [ -n "$text" ]; then
+   mv "$text" "$ENGINEDIR"
+fi


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Помогите с перемещением файлов"  
Сообщение от mxmedia email on 12-Май-08, 14:59 

>-mv $text $ENGINEDIR
>+if [ -n "$text" ]; then
>+   mv "$text" "$ENGINEDIR"
>+fi

не помогает... дело в том, что если в цикле вставить

echo $text

на выводе пустых строк нету

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Помогите с перемещением файлов"  
Сообщение от phpcoder email(??) on 12-Май-08, 15:04 
>на выводе пустых строк нету

Покажите содержимое файла log.txt


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Помогите с перемещением файлов"  
Сообщение от mxmedia email on 12-Май-08, 15:06 
>Покажите содержимое файла log.txt

/eval/engine/engine0.nup
/eval/engine/engine1.nup
/eval/engine/engine2.nup

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Помогите с перемещением файлов"  
Сообщение от phpcoder email(??) on 12-Май-08, 15:11 
>подскажите, пожалуйста, что я делаю не так:
>
>#!/bin/sh
>$TMPFILE="log.txt"
>cat ./$TMPFILE | sed -e "s|[^/]*/||g" |
>while read text;do
> mv $text $ENGINEDIR
>done
>
>результатом вываливаются ошибки о не существовании файлов...

Короче, ясно.

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

Попробуйте так:

while read text;do
mv "$text" $ENGINEDIR"
done < "$TMPFILE"


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Помогите с перемещением файлов"  
Сообщение от mxmedia email on 12-Май-08, 15:20 
не помогает... Вопрос не совсем в том, почему файлы не найдены, а в том, почему
echo "$text $ENGINEDIR"
выводит только вторую переменную... , а
mv $text $ENGINEDIR
выдает, что не найдены файлы, причем светит последние несколько символов от имени...
т.е.:
: No such file or directoryupe0.nup
: No such file or directoryupe1.nup
: No such file or directoryupe2.nup

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Помогите с перемещением файлов"  
Сообщение от phpcoder email(??) on 12-Май-08, 15:24 
>выдает, что не найдены файлы, причем светит последние несколько символов от имени...

Мне кажется, что ваш пример упрощен и в реальности данные/скрипт несколько другие...

Между отображением имени файла и его получением из файла на $text может влиять только sed. Возможно, он как-то не так обрабатывает ваши строчки.

sh -x вам в помощь!


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Помогите с перемещением файлов"  
Сообщение от mxmedia email on 12-Май-08, 15:31 
На самом деле скрипт очень большой... но не работает именно этот цикл...

while read text;do                          
    mv "$text" "$ENGINEDIR"
    echo "$text"                  
    echo "$ENGINEDIR"            
    echo "$text $ENGINEDIR"      
    done            

Полный вывод получается таким:
: No such file or directoryup     <== почему здесь не полностью указано имя?
engine0.nup                  
/var/www/data/              
/var/www/data/                   <== почему не пишет имя файла?
: No such file or directoryup
engine1.nup                  
/var/www/data/              
/var/www/data/              
: No such file or directoryup
engine2.nup                  
/var/www/data/              
/var/www/data/              

почему он не пишет имя файла?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Помогите с перемещением файлов"  
Сообщение от phpcoder email(??) on 12-Май-08, 15:42 
>На самом деле скрипт очень большой... но не работает именно этот цикл...
>
>
>while read text;do
>    mv "$text" "$ENGINEDIR"
>    echo "$text"
>    echo "$ENGINEDIR"
>    echo "$text $ENGINEDIR"
>    done
>

Проверьте так:

while read text;do
    echo mv $text $ENGINEDIR
done

>[оверквотинг удален]
>: No such file or directoryup
>engine1.nup
>/var/www/data/
> /var/www/data/
>: No such file or directoryup
>engine2.nup
>/var/www/data/
> /var/www/data/
>
>почему он не пишет имя файла?

Что-то многовато полного вывода для всего трех echo. Варианты:
- в $text оказывается несколько строк
- в $text попадает сообщение об ошибке по какой-то причине

Трудно сказать наверняка не видя код.

P.S. Опять же напоминаю про sh -x: добавьте перед циклом set -x, а после set +x и посмотрите что будет выводить.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Помогите с перемещением файлов"  
Сообщение от madskull (??) on 19-Май-08, 16:05 
>[оверквотинг удален]
>в том, почему
>echo "$text $ENGINEDIR"
>выводит только вторую переменную... , а
>mv $text $ENGINEDIR
>выдает, что не найдены файлы, причем светит последние несколько символов от имени...
>
>т.е.:
>: No such file or directoryupe0.nup
>: No such file or directoryupe1.nup
>: No such file or directoryupe2.nup

Есть подозрение, что исходный файл имеет DOS-овский форимат конца строки, т.е. \r\n.
Просто надо убрать эти лишние '\r', например sed 's/\r//'

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Помогите с перемещением файлов"  
Сообщение от jd2 (ok) on 16-Май-08, 03:41 
Приведённый Вами скрипт, если в нём заменить
$TMPFILE="log.txt"
на
TMPFILE="log.txt"
и определить переменную ENGINEDIR, работает нормально (хотя я бы использовал здесь basename вместо sed).

Всякие ковычки вокруг "$text" и т.п. актуальны, если в путях могут быть пробельные символы.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру