Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Перебрать рекурсивно директории / 25 сообщений из 25, страница 1 из 1
23.05.2007, 18:05:22
    #34546667
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#!/bin/bash

FILES=`ls -R | grep "/"`
echo -e $FILES "\n"
for i in $FILES; do

    echo $i
done

Такая конструкция режет имена с пробелами:

автор
./123: ./asd sda:

./123:
./asd
sda:


Как сделать что бы не резалось?
...
Рейтинг: 0 / 0
23.05.2007, 18:17:06
    #34546697
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
например

IFS=""
...
Рейтинг: 0 / 0
23.05.2007, 18:21:41
    #34546713
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
--null--например

IFS=""

Супер! А что это за флаги IFS, OFS?
...
Рейтинг: 0 / 0
23.05.2007, 18:34:18
    #34546738
Osya-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
field separator
...
Рейтинг: 0 / 0
23.05.2007, 18:52:34
    #34546775
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
только хороший тон - их обратно восстанавливать не забывать. Мало ли что дальше в скрипте делаться будет.
...
Рейтинг: 0 / 0
23.05.2007, 20:36:42
    #34546914
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
А мб man find?
...
Рейтинг: 0 / 0
23.05.2007, 22:00:07
    #34547000
Alex Roudnev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
А дустом не пробовали - файндом то бишь??
...
Рейтинг: 0 / 0
24.05.2007, 07:17:46
    #34547300
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
Такое напечатать: tree -d -f -i
религия не позволяет???
...
Рейтинг: 0 / 0
24.05.2007, 07:20:46
    #34547304
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
--null--только хороший тон - их обратно восстанавливать не забывать. Мало ли что дальше в скрипте делаться будет.

Хороший тон - их вааще не трогать...
...
Рейтинг: 0 / 0
24.05.2007, 09:18:45
    #34547440
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
nik_xХороший тон - их вааще не трогать...
да ладно Если дадены Аллахом - можно юзать, прием-то стандартный. К тому же там, как делал Akh - именно они и уместны. Хотя find конечно гораздо удобнее.
...
Рейтинг: 0 / 0
24.05.2007, 09:21:35
    #34547445
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
а вот tree мне бы религия не позволила: далеко не всегда и не у всех оно установлено, мне, например, оно не нужно.
...
Рейтинг: 0 / 0
24.05.2007, 09:44:25
    #34547527
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
nik_xТакое напечатать: tree -d -f -i
религия не позволяет???

Надобно, как заметил --null--, специально доставлять. У меня тож нет.
...
Рейтинг: 0 / 0
24.05.2007, 09:44:45
    #34547529
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
DocAlА мб man find?

Один фиг
...
Рейтинг: 0 / 0
24.05.2007, 09:45:09
    #34547532
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
Osya-field separator

Фенкс. Как я понял, глобальный на bash.
...
Рейтинг: 0 / 0
24.05.2007, 10:07:52
    #34547610
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
--null--например

IFS=""

Блин. Оказалось, он все подряд склеивает в одну строку, т.е.:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#!/bin/bash

IFS_SAVE=${IFS}
IFS=""
FILES=`ls -R | grep  "/" | awk -F: '{print $1}'`
FILES=${FILES}
echo -e "Переменная содержит:" ${FILES} "\n"
for i in ${FILES} "."; do

    echo "Следующая итерация переменной:" ${i}:
done
IFS=${IFS_SAVE}

Выдает:
автор

Переменная содержит: ./123
./asd sda
./dsfsd

Следующая итерация переменной: ./123
./asd sda
./dsfsd:
Следующая итерация переменной: .:



Надо катологи разделить по переносу строки.
...
Рейтинг: 0 / 0
24.05.2007, 10:22:38
    #34547656
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
Извиняюсь - я ошибся

Вот как следует сделать

IFS="
"


это если данный пример принципиален. А ваще find действительно гораздо интереснее.
...
Рейтинг: 0 / 0
24.05.2007, 10:27:36
    #34547674
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
--null--Извиняюсь - я ошибся

Вот как следует сделать

IFS="
"


это если данный пример принципиален. А ваще find действительно гораздо интереснее.

Фенкс, уже сам допетрил . :)

Только, теперь что-то внутри цикла (это была приведена урезанная версия) развалилось. :) Буду чинить.
...
Рейтинг: 0 / 0
24.05.2007, 10:29:44
    #34547682
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
мне вот не нравится, что у Вас собирается все в одну большую переменную, если каталогов много - может быть плохо

Я бы осмелился предложить так:
Код: plaintext
1.
2.
3.
4.
5.
6.
#!/bin/sh
ls -R | grep '/' |
while read i
do
    echo "var= $i"
done

да и в чем проблема с find-ом? Он отлично заменит данный цикл и отработает быстрее, скорее всего.
...
Рейтинг: 0 / 0
24.05.2007, 10:40:34
    #34547743
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
--null--мне вот не нравится, что у Вас собирается все в одну большую переменную, если каталогов много - может быть плохо

Я бы осмелился предложить так:
Код: plaintext
1.
2.
3.
4.
5.
6.
#!/bin/sh
ls -R | grep '/' |
while read i
do
    echo "var= $i"
done

да и в чем проблема с find-ом? Он отлично заменит данный цикл и отработает быстрее, скорее всего.

У меня нет большого опыта работы с bash, а скрипты иногда приходиться писать. Поэтому использую те средства, которые знаю или до которых догадываюсь (нахожу) в первую очередь.

За пример спасибо. Попробую через него, так как выглядит все гораздо красивей, рациональней и корректней.
...
Рейтинг: 0 / 0
25.05.2007, 15:33:52
    #34551732
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
--null--мне вот не нравится, что у Вас собирается все в одну большую переменную, если каталогов много - может быть плохо

Я бы осмелился предложить так:
Код: plaintext
1.
2.
3.
4.
5.
6.
#!/bin/sh
ls -R | grep '/' |
while read i
do
    echo "var= $i"
done

да и в чем проблема с find-ом? Он отлично заменит данный цикл и отработает быстрее, скорее всего.

Все изменения внутри while стали локальными. Такой ход действий в данном случае не допустим.
...
Рейтинг: 0 / 0
25.05.2007, 18:06:11
    #34552417
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
Бедняга, ты всё мучаешься...

Попробуй что-нибудь вроде:

for name in `ls -R -1 | grep / | replace ' ' ^ -- | replace : '' --`
do
echo $name | replace ^ ' ' --
done

ЗЫ: Извини, первое, что в голову пришло...
...
Рейтинг: 0 / 0
25.05.2007, 20:18:53
    #34552758
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
Akh DocAlА мб man find?

Один фигА где его нет в базовых утилитах?
...
Рейтинг: 0 / 0
25.05.2007, 22:32:12
    #34552874
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
согласен с тем, что лучше find
но если продолжать извраты -то вот
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#!/bin/sh

IFS="
"
set `ls -R | grep '/' |
while read i
do
 echo $i
done`


while [ "$#" -ne  0  ]
do
echo $ 1 
shift || break
done
...
Рейтинг: 0 / 0
25.05.2007, 22:35:44
    #34552877
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
в переменных $1..
окажутся имена каталогов и можно делать с ними што хошь
...
Рейтинг: 0 / 0
30.05.2007, 02:11:13
    #34559743
A. Fig Lee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебрать рекурсивно директории
а че вы все грепаете на слеш.

Код: plaintext
test -d file/or/directory
- че уже отменили?
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Перебрать рекурсивно директории / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]