LINUX.ORG.RU

bash работа с директориями

 


0

1

Добрый день, нужна помощь в написании микроскрипта. Опишу что и как. Есть программа которая может выполняться только в каталоге с проетом, но не может работать с путями. Есть основной каталог в котором лежат подкаталоги (проекты) в которые необходимо зайти. Выполнить программу задав имя каталога + расширение so. Программа создаст в каталоге еще один подкаталог build и файл который назовём как имя каталога+ расширение so. Далее удалить вновь созданный build в каталоге и выходим обратно в основной каталог. Таким образом нужно перебрать все проеты в основном каталоге.

пример как это делаю ручками: #ls показывает субкаталоги 1 2 3 4 5 6 #cd ./1 #build make 1.so #rm -rf ./build #cd ..

вобщем нужна помощь в автоматизации процесса



Последнее исправление: monster33 (всего исправлений: 4)

написсании

коталоге

проетом

обзавем

Из-за этого даже не смог вникнуть в суть вопроса. Коты, наПиссали, ...

anonymous
()

Ты хочешь автоматизировать это?

cd ./1
build make 1.so
rm -rf ./build
cd ../2
build make 2.so
rm -rf ./build
cd ../3
build make 3.so
rm -rf ./build
cd ../4
build make 4.so
rm -rf ./build
cd ../5
build make 5.so
rm -rf ./build
cd ../6
build make 6.so
rm -rf ./build
cd ..

Если да, то, во-первых, посмотри в сторону makefile-конифига. Там можно всё красиво разделить на скомпилировать / собрать / очистить / и т. д. А во-вторых, циклы. Юзаешь цикл for. В данном случае счётчик цикла — имя папки. Инкрементироваться будет от 1 до тех пор пока не встретит несуществующую папку. Выполнить проверку «существует ли папка» на баше можно так:

if ! [ -d /path/directory/ ]; then
echo 'No directory'
fi

kalterfive ★★
()
Ответ на: комментарий от kalterfive

да именно так как описано выше. Но проекты собирает именно эта программа, исходников её нет.

monster33
() автор топика
Ответ на: комментарий от I-Love-Microsoft

было бы здорово если ктонибудь показал на примере.

monster33
() автор топика
Ответ на: комментарий от anonymous

Из-за этого даже не смог вникнуть в суть вопроса

смотри какая ты нежная принцесса, почему забыла залогиниться? анонимный аккаунт для серьёзных дядь

anonymous
()
find . -type d -maxdepth 1 exec sh -c 'cd {} && build make 1.so && rm -rf ./build'

Достал попрошайничать. Элементарные вещи с for I in *; do не можешь?

most-fucktum
()
Ответ на: комментарий от most-fucktum

find . -type d -maxdepth 1 exec sh -c 'cd {} && build make 1.so && rm -rf ./build' \;

\;

anonymous
()
Ответ на: комментарий от most-fucktum

Мимо, дружок! cd не будет, как ты думаешь.

Да, это правда. Ошибся. Он будет делать cd в директорию, содержащую целевую, а не в целевую.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)
for i in *; do
  cd $i;
  build make $i.so
  rm -rf build
  cd ..
done
monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.