2013-11-29 3 views
0

Я новичок в сценариях linux/unix, и у меня есть несколько десятков проектов, которые я хочу настроить для папок Subversion (в конце концов я доберусь до Git lol). Как написать сценарий для выполнения следующих действий:Как написать сценарий оболочки (.sh) для следующих

  1. Получить список всех подпапок в папке
  2. Для каждой вложенной папки, используйте это выполнить следующие команды:
svnadmin create /var/www/svn/<sub-folder> 

svn import /var/www/<sub-folder> file:///var/www/svn/<sub-folder> 

chmod -R 777 var/www/svn/<sub-folder> 

chown -R apache.apache var/www/svn/<sub-folder> 

Из того, что я видел в Интернете до сих пор, я полагаю, я положил все это в .sh файл и ввести что-то вроде:

.sh thing.sh 

... выполнить его.

Любая помощь приветствуется.

ответ

2
for i in `find -maxdepth 1 -type d`; do 
    svnadmin create "/var/www/svn/$i" 
    svn import "/var/www/$i" "file:///var/www/svn/$i" 
    chmod -R 777 "var/www/svn/$i" 
    chown -R apache.apache "var/www/svn/$i" 
done 

Конечно ваша команда svn import неверен, и тракты в вашем chmod и chown отсутствует /. В любом случае, это ваши копии.

+0

Если это нужно применять для всех подкаталогов (в соответствии с заданием проблемы), то я думаю, нам не нужно ставить условие '-maxdepth 1', чтобы найти – user1587504

+0

Спасибо keltar за сценарий и исправления пути и синтаксиса. Вы также правы с отдельными подкаталогами глубины (мое плохое для того, чтобы не указывать раньше, жаль всех). – fuzzyanalysis

+0

отредактируйте chmod и chown .. вам не хватает/в начале пути – Dropout

1

Это работает для вас?

#!/bin/bash 
for FILE in `ls` 
do 
    if test -d $FILE 
    then  
     svnadmin create /var/www/svn/$FILE 
     svn import /var/www/$FILE file:///var/www/svn/$FILE 
     chmod -R 777 /var/www/svn/$FILE 
     chown -R apache.apache /var/www/svn/$FILE 
    fi 
done 

После сохранения выполнить chmod +x {name of file} на сценарий, чтобы сделать его исполняемым с ./{name of file} или sh {name of file}.

В случае, если нужны все вложенные папки рекурсивно из текущей папки:

#!/bin/bash 
for FILE in `find . -type d` 
do 
    if test -d $FILE 
    then  
     svnadmin create /var/www/svn/$FILE 
     svn import /var/www/$FILE file:///var/www/svn/$FILE 
     chmod -R 777 /var/www/svn/$FILE 
     chown -R apache.apache /var/www/svn/$FILE 
    fi 
done 

Если у вас есть какие-либо вопросы, пожалуйста, комментарии.

+0

Я думаю, что он не будет искать подкаталоги в каталоге, из которого вы работаете с – user1587504

+0

Нет, это будет только возьмите папки в текущей папке. Если вам это нужно рекурсивно, вам придется использовать 'find'. Вы не упомянули рекурсию. Я отредактирую его. – Dropout

+1

Флаг '-l' должен быть удален, или вы будете перебирать много мусора, а не только имена файлов. – keltar

1

Вы можете создать сценарий doIt.sh со следующим:

#!/bin/bash 
svnadmin create /var/www/svn/$1 
svn import /var/www/$1 file:///var/www/svn/$1 
chmod -R 777 var/www/svn/$1 
chown -R apache.apache var/www/svn/$1 

Затем вы можете перейти в папку, в которой вы хотите, чтобы найти все вложенные папки и выполнить следующие действия:

find . -type d | xargs -I {} ./doIt.sh {} 

Кроме того, вы уверены, что эта линия:

svn import /var/www/<sub-folder> file:///var/www/svn/<sub-folder> 

Вы не имели в виду:

svn import /var/www/svn/<sub-folder> file:///var/www/svn/<sub-folder> 

Примечание: Отсутствует Svn вложенные в пути

Смежные вопросы