The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Помогите с перемещением файлов, !*! mxmedia, 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 переменные в одной строке?

  • Помогите с перемещением файлов, !*! phpcoder, 14:29 , 12-Май-08 (1)
    >подскажите, пожалуйста, что я делаю не так:
    >
    >#!/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


  • Помогите с перемещением файлов, !*! phpcoder, 15:11 , 12-Май-08 (5)
    >подскажите, пожалуйста, что я делаю не так:
    >
    >#!/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"


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

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

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

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

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


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

          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/              

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

          • Помогите с перемещением файлов, !*! phpcoder, 15:42 , 12-Май-08 (9)
            >На самом деле скрипт очень большой... но не работает именно этот цикл...
            >
            >
            >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 и посмотрите что будет выводить.

      • Помогите с перемещением файлов, !*! madskull, 16:05 , 19-Май-08 (11)
        >[оверквотинг удален]
        >в том, почему
        >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//'

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

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




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

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