I have thousands of directories, all of them has this format;

/var/www/vhosts/[USERNAME].company.com/conf/

and i have a file called x.txt, it's content should have

[USERNAME] and some static text...

so when i do dir /var/www/vhosts/*/conf/ , I am getting all the directories that I need to copy the file under, however, I don't know how to grab that [USERNAME] and put it in that file that i need to copy.

All suggestions welcome. I can only use shell scripting on this environment.

Thanks,

link|improve this question

feedback

3 Answers

up vote 5 down vote accepted
cd /var/www/vhosts && for d in */; do
   user=${d%%.*}
   echo "$user blah blah" > "${d}/conf/x.txt"
done

... should get you pretty much what you want.

link|improve this answer
1  
You should put a slash after the asterisk so only directories are included: for d in */ – Dennis Williamson Jan 24 '10 at 6:43
good point, updated – Mike Pountney Jan 24 '10 at 12:25
Thanks, I saved the world yet again. Would you recommend any good book/url on the subject? – Devrim Jan 24 '10 at 18:50
From Bash to Zsh, by Apress is a good one: apress.com/book/view/1590593766 . Also, Classic Shell Scripting from O'Reilly: my.safaribooksonline.com/0596005954 – Mike Pountney Jan 25 '10 at 1:25
feedback

Dennis and Mike make sure you're quoting ${dir}. If there are any directories with spaces this could result in some issues.

echo "$user and some static text..." > "${dir}/conf/x.txt"

For portability's sake I would use "${d%%.*}" for finding the user's name.

link|improve this answer
good point on the quotes, and your tip on ${d%%.*} saves over 1000 calls to awk, updated! – Mike Pountney Jan 24 '10 at 12:26
feedback

Here's another way to do it:

cd /var/www/vhosts &&
find -maxdepth 1 -mindepth 1 -type d -print0 |
while read -d '' -r dir
do
    user=$(basename "$dir" .company.com)
    echo "$user and some static text..." > "${dir}/conf/x.txt"
done
link|improve this answer
Thanks Dennis, I wish I could choose two answers. Would you recommend any good book/url on the subject? – Devrim Jan 24 '10 at 18:51
On Bash scripting? Search ServerFault and StackOverflow. There are questions/answers that'll point the way. One I can recommend is mywiki.wooledge.org/EnglishFrontPage – Dennis Williamson Jan 24 '10 at 20:50
Thanks Dennis. It's always good to learn from a pro what is worth reading. – Devrim Jan 25 '10 at 1:07
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.