Есть список файлов, который хранитсе в текстовике, например:
/root/list.txt:
/home/user/1.txt
/2.txt
/etc/3.txt
Нужно одной командой добавить текст в конец всехэтих файлов. Подскажите как правильнее это сделать.
Модератор: Bizdelnick
/home/user/1.txt
/2.txt
/etc/3.txt
Код: Выделить всё
#!/bin/bash
list=/root/list.txt
text="TEXT"
set -- `sed -n "s/^//gp" $list` && echo $text >> $1; echo $text >> $2; echo $text >> $3Код: Выделить всё
eval echo 'Текст, который надо добавить' $(for i in `cat /root/list`; do echo -n "| tee -a $i "; done) > /dev/nullКод: Выделить всё
cat /root/list | while read i; do echo 'MEGATEXT' >> "$i"; doneelide писал(а): ↑15.05.2006 19:22Код: Выделить всё
eval echo 'Текст, который надо добавить' $(for i in `cat /root/list`; do echo -n "| tee -a $i "; done) > /dev/null
Код: Выделить всё
for i in `cat /root/list`; do echo "text" >> ${i}; doneКод: Выделить всё
for i in `cat /root/list`; do if [ "`grep WORD $i`" ]; then echo "text" >> ${i}; fi; donediesel писал(а): ↑15.05.2006 20:22не совсем уверен:
Код: Выделить всё
for i in `cat /root/list`; do if [ "`grep WORD $i`" ]; then echo "text" >> ${i}; fi; done
Код: Выделить всё
for i in `cat /root/test2/`; do
if [ "`grep 'WORD' ${i}`" ]; then
continue
else
echo "CODE" >> ${i}
fi
donesoko1 писал(а): ↑15.05.2006 20:30diesel писал(а): ↑15.05.2006 20:22
не совсем уверен:
Код: Выделить всё
for i in `cat /root/list`; do if [ "`grep WORD $i`" ]; then echo "text" >> ${i}; fi; done
Во, я точно по такому же принципу делал. Почему-то не работает=( Однако у меня немного по-другому сделано. Есть условие else (можно и без него, только не помню как в sh отрицание ставится (не '!' ли?)):
Код: Выделить всё
for i in `cat /root/test2/`; do if [ "`grep 'WORD' ${i}`" ]; then continue else echo "CODE" >> ${i} fi done
Ведь надо дописывать в те файлы, в которых нет указанной фразы...
Хотя по логике, grep 'WORD' в любом случае выполнится (есть там там эта фраза, или ее нет...), поэтому до else может и не дойти.
Значит continue с else выбрасываем:
Код: Выделить всё
for i in `cat /root/test2/`; do
if [ ! "`grep 'WORD' ${i}`" ]; then
echo "CODE" >> ${i}
fi
doneКод: Выделить всё
$ for i in `ls .`; do echo $i `cat $i`; done
file1
file2 WORD
file3
file4
file5 WORD
list ./file4 ./file2 ./list ./file5 ./file1 ./file3
$ for i in `cat list`; do if [ ! "`grep WORD $i`" ]; then echo "WORD" >> ${i}; fi; done
$ for i in `ls .`; do echo $i `cat $i`; done
file1 WORD
file2 WORD
file3 WORD
file4 WORD
file5 WORD
list ./file4 ./file2 ./list ./file5 ./file1 ./file3 WORDКод: Выделить всё
$ cat test/
cat: test/: Is a directoryКод: Выделить всё
for f in $(grep -L 'WORD' /root/test2/*); do echo "CODE" >> $f; donejsv писал(а): ↑15.05.2006 21:19я бы сделал что-то вроде:
Код: Выделить всё
for f in $(grep -L 'WORD' /root/test2/*); do echo "CODE" >> $f; done
Код: Выделить всё
mailserver# cat /root/test2/
s
.gp
...2.swpxmailserver#soko1 писал(а): ↑15.05.2006 21:21
Код: Выделить всё
mailserver# cat /root/test2/ s .gp ...2.swpxmailserver#
а вообще, я забыл '*' добавить
Я не говорил что она решена=) Тут нужно чтобы спецы посмотрели и оценили.
Код: Выделить всё
if (i = 1) /* вместо == */Смотрите update моего предыдущего сообщения. Насчет cat'а вы правы (ЗЫ все, я домой - подумаю над этой задачей).
soko1 писал(а): ↑15.05.2006 21:34На мой взгляд ошибка в условии. Т.к. это эквивалентно тому, что написать на Си условие:
Код: Выделить всё
if (i = 1) /* вместо == */
Получится что i просто присвоилась единица, а сравнения ни с чем не произошло. Тоесть, когда мы пишем if [ "`grep WORD /что-то_там`" ], то выполняется просто grep и код программы, которые после then...
Код: Выделить всё
for i in `ls /root/test2/`; do [ "`grep $WORD ${i}`" ] || echo $CODE >> ${i}; doneКод: Выделить всё
for i in `cat /root/list.txt`; do [ "`grep $WORD ${i}`" ] || echo $CODE >> ${i}; doneКод: Выделить всё
cat /root/list.txt | while read i; do [ "`grep $WORD ${i}`" ] || echo $CODE >> ${i}; doneвсе еще проще.(Nab @ May 16 2006, в 00:50) писал(а):как сказал elide, только уже с условием
Код: Выделить всё
cat /root/list.txt | while read i; do [ "`grep $WORD ${i}`" ] || echo $CODE >> ${i};done
Код: Выделить всё
cat /root/list.txt | while read i; do grep -q "$WORD" "$i" || echo $CODE >> "$i"; doneвсе еще проще.и не надо городить огород из ["``"]Код: Выделить всё
cat /root/list.txt | while read i; do grep -q "$WORD" "$i" || echo $CODE >> "$i"; done