Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Помогите со скриптом  (Прочитано 678 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн pinzumpuk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Помогите со скриптом
« : 23 Мая 2011, 10:09:43 »
Код:
#!/bin/bash
for _pdf in $(ls *.pdf)
do
echo "Копирую android:/sdcard/Download/" $_pdf
  adb push ./$_pdf /sdcard/Download/$_pdf
done
Скрипт должен скопировать все файлы pdf из текущего дира. Проблема появляется если в названии файла присутствует пробел.

Оффлайн ZwS

  • Старожил
  • *
  • Сообщений: 1674
    • Просмотр профиля
Re: Помогите со скриптом
« Ответ #1 : 23 Мая 2011, 11:13:08 »
#!/bin/bash
for _pdf in $(ls *.pdf)
do
echo "Копирую android:/sdcard/Download/" $_pdf
  adb push "./$_pdf" "/sdcard/Download/$_pdf"
done
Dell Inspiron One 2330 | Intel+Radeon HD7650A | 8GB RAM | Ubuntu GNOME 17.10

andrey_p

  • Гость
Re: Помогите со скриптом
« Ответ #2 : 23 Мая 2011, 11:17:12 »
Не будет работать :) Надо
for _pdf in *.pdfили
ls *.pdf | while read _pdf
Второй вариант, если все-таки команда нужна на самом деле, как, допустим, при копировании  pdf файлов из вложенных каталогов:

ls -R | grep '\.pdf' | while read _pdf ; do
...
done
« Последнее редактирование: 23 Мая 2011, 12:14:19 от andrey_p »

Оффлайн pinzumpuk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Помогите со скриптом
« Ответ #3 : 23 Мая 2011, 11:53:12 »
Спасибо , работает!  Беру первый вариант.

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Помогите со скриптом
« Ответ #4 : 23 Мая 2011, 12:16:03 »
Можно еще так:
for i in `ls *.pdf`
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

andrey_p

  • Гость
Re: Помогите со скриптом
« Ответ #5 : 23 Мая 2011, 12:37:53 »
 :D Еще один герой-двоечник!  :P

---
Цитировать
One of the most common mistakes BASH programmers make is to write a loop like this:

     for i in $(ls *.mp3); do    # Wrong!
        some command $i          # Wrong!
     done

Тут 2 "wrong"-a. Читать всем - http://mywiki.wooledge.org/BashPitfalls

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Помогите со скриптом
« Ответ #6 : 23 Мая 2011, 17:24:17 »
Тоже мне проблема.
IFS=$'\n'
for i in `ls *.pdf`
do
echo "$i"
done

Все, проблема решена.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Помогите со скриптом
« Ответ #7 : 24 Мая 2011, 10:28:24 »
IFS, по хорошему, надо после выполнения скрипта возвращать на пробельное значение.
В 99,99% случаев это не требуется, но иногда можно нарваться на неожиданность.

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Помогите со скриптом
« Ответ #8 : 24 Мая 2011, 11:18:49 »
Если достаточно большой скрипт, то можно писать цикл в функцию и уже в ней локально изменять переменную. andrey_p, многие делают так как им удобно и говорить что они идиоты как-то не тактично.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Помогите со скриптом
« Ответ #9 : 24 Мая 2011, 11:21:41 »
... говорить что они идиоты как-то не тактично.
+100500

andrey_p

  • Гость
Re: Помогите со скриптом
« Ответ #10 : 24 Мая 2011, 11:37:31 »
Ну вот, подтрунить немного нельзя.  :-[

 

Страница сгенерирована за 0.05 секунд. Запросов: 25.