![]() |
Модераторы: powerfox, ZeeLax |
![]() ![]() ![]() |
|
Kosya4ok |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 23.7.2007 Репутация: нет Всего: нет |
Всем доброе время суток.
Задача следующая: требуется выполнить поиск по всем директория данной директории и запустить в них команду которая показывает путь к директории в которой ты находишься в данный момент. На ум приходит следующее: #!/bin/sh for $i in * do if test -d $i path=`pwd` cd $path/$i/ echo `cd $path/$i/` ./$0 done Но блин, скриптец заходит только по первым директориям и не возвращается обратно. У кого есть какие идеи? Буду рад услышать. |
|||
|
||||
nickless |
|
||||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 41 Всего: 181 |
Долго читал это предложение, но так и не понял какие директории нужно когда выводить.
Оно? Если нет, объясните с примером что нужно сделать. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
||||
|
|||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 21 Всего: 207 |
Добавлено через 9 минут и 19 секунд
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Kosya4ok |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 23.7.2007 Репутация: нет Всего: нет |
Супер! Я када потестил твой код просто отпал!Ты понял всё правильно, но есть нюанс!
Вот если я напишу так:
То команда сперва пройдёт по всем директориям и вложенным директориям и тока затем выведет на экран I am here!. А мне надо чтобы заходя в каждую директорию запускалась команда echo "I am here!". |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 41 Всего: 181 |
Или делай рекурсивно функцией, как написал MAKCim Если нужно именно чтоб запускалась комманда, используй -exec вместо -printf, как это сделать читай в man find. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
Kosya4ok |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 23.7.2007 Репутация: нет Всего: нет |
Потестил код MAKCim.
Выдаёт ошибку ./alex_8[2]: 0403-057 Syntax error at line 2 : `(' is not expected. alex_8 - это имя моего скрипта. Походу что то не очень гладко. Да и просьба объяснить $1/*, if test -d "$i" &&, почему под if всё взято в фигурные скобки?, что означает объвление local STRING, а выражение directory $STRING как мы такое можем делать если у нас функция не принимает никаких значений. Я просто не работал в шеле с функциями поэтому можно немного дать пояснений. Спасибо. |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 41 Всего: 181 |
У него не зря там /bin/bash написанo ![]() Фигурные скобки это блок комманд, local объявляет переменную, а функции имеют несколько другой синтакс чем в обычных языках программирования. Советую почитать Advanced Bash-Scripting Guide, где-то тут на форуме я видел ссылку на русский перевод. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
Kosya4ok |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 23.7.2007 Репутация: нет Всего: нет |
А после кода
find: 0652-017 -printf is not a valid option. Попробывал сделать так, так как в манах был описана опция именно print
Вывалилось find: 0652-009 There is a missing conjunction Окей я тогда немного уточню задачу. Мне не требуется чтобы именно в каждой директории делаль вывод пути, а именно чтобы в каждой директории запускалась определённая неважно какая команда. Например, у меня есть скрипт который убирает не нужные файлы из системы. Так вот я захожу в 1 директорию его там запускаю, во 2 и т.д. И для этой цели как пример надо использовать обход по всем вложенным папкам. |
||||
|
|||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 41 Всего: 181 |
Что это за версия find где нет -printf? Посмотри есть ли там -execdir или -exec, это вроде есть в POSIX. Если нет, есть еще программа xargs ею можно передавать вывод find другому скрипту, вроде
-------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
Kosya4ok |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 23.7.2007 Репутация: нет Всего: нет |
При замене #!/bin/sh на !#/bin/bash выдаёт ksh: ./alex_8_MAKCim: not found.
Еси уже на то пошло то function объвлена тока в ksh http://bama.ua.edu/cgi-bin/man-cgi?00+00 А зачем переменную объвялть через local?Мона ж ипросто объявить STRING. Так а $1/*, if test -d "$i" &&. Так а зачем посе if ставить фигурные скобки еси мона после каждого блока ставить точку с запятой? P.S. И еси мона сцылку на русскуий перевод Advanced Bash-Scripting Guide. Добавлено через 11 минут и 3 секунды
Работает замечательно, но вот тока куда мне теперь вставить свою команду (см. пример выше)? P.S. Да и еси можно пояснения к коду. Ну вот например find * -type d выводит список всех поддиректорий, а дальше перенаправляется в | xargs -n1 ls -lad и что происходит? Сенкс. При
Выдаёт: find: 0652-018 An expression term lacks a required parameter. А при
ВЫдаёт: find: 0652-017 -execdir is not a valid option. Может это я как то не правильно использую опции в find? |
||||||
|
|||||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 9 Всего: 40 |
find . -type d -exec echo "I am in {}" \;
-------------------- Бонифаций. |
|||
|
||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 21 Всего: 207 |
Добавлено через 2 минуты и 11 секунд
можно и глобальные данные в ЯВУ использовать ![]() но это ж не значит, что нужно -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
Kosya4ok |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 23.7.2007 Репутация: нет Всего: нет |
Бонифаций а вы сами тестировали ваш код?
Выводит: I am in {} I am in {} I am in {} I am in {} I am in {} Ровно стока раз сколько у меня и вложенных директорий. Any suggestion? ![]() Добавлено через 8 минут и 16 секунд MAKCim а как твой скрипт юзать? Набирать типа ./alex_8_MAKCim_1 команда_которую_я_хочу_выполнить? P.S. Если да, то ./alex_8_MAKCim_1 ls -l Выдаёт: ksh: ./alex_8_MAKCim_1: not found. Я так понимаю мне надо поменять интерпретаор с ksh на bash? А как это сделать если у меня нет ажминских прав? |
|||
|
||||
nickless |
|
||||||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 41 Всего: 181 |
Расскажи ка для начала что у тебя за система и шелл. *nix-ы могут сильно отличатся версиями комманд, у большинства стоит linux, там у всех стандартных комманд есть куча GNU-расширений, а у тебя похоже что-то другое.
Судя по ошибкам в твоей системе не установлен bash, по этому вряд ли bash scripting guide сильно поможет, надо тебе смотреть документацию к ksh (там синтакс немного отличается).
А дальше перенаправляется в xargs (man xargs), а остальное это параметр к нему и комманда ls с параметром -lad (man ls), в данном случае xargs вызавает ls с параметром -lad для каждой строки. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Linux/UNIX: Oбщие вопросы" | |
|
В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу). В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим. Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |