find/xargs проблемче

4 отговора 126 прегледа
#1

find/xargs проблемче

имам template файлове в диреткория ./template (с файлове и поддиректории) искам да ги обработя и да получа резултата в ./build

аз съм го направил с 2 файла

build.sh:
#!/bin/bash
DESTINATION=build

rm -r -f $DESTINATION
cp -r template $DESTINATION

find $DESTINATION/ -type f -exec ./build.one.sh '{}' ';'

и build.one.sh:
#!/bin/bash

cat $1 | tplprocess > $1


струва ми се, че трябва да може да стане с един файл, но не мога да се оправя със синтаксиса на find,
също така ако има някой идеа да се направи всичко още при самото копиране, а не както е сега първо cp и после find

благодаря

Отговор
в отговор на ce #2

Re: find/xargs проблемче

Избягвай да правиш неща като


cat $1 | ... > $1


Понякога работят, понякога не. Според мен това, че работят (особено пък понякога) е бъг в bash.

Отговор
в отговор на l #3

Re: find/xargs проблемче

:-) тогава ще трябва да минавам през временен файл :-(

аз дори пробвах

tplprocess < $1 > $1

ама тва изобщо не работи :-)

сега проблемите ми станаха с 1 повече :-))

Отговор
в отговор на ce #4

Re: find/xargs проблемче

Ето ти решение, което ще работи ако в директорията няма много файлове:


cd template
for i in `find . -type d` ; do
mkdir -p $DESTINATION/$i
done

for i in `find . -type f` ; do
cat $i | tplprocess > $DESTINATION/$i
done


Не копира два пъти, не използва временни файлове. Само дето няма да работи ако резултата от "find . -type f" е много дълъг. Ако имаш много файлове можеш да го пренапишеш да прави същите неща в -exec на find, но ще е по-бавно.

Отговор
в отговор на | #5

уха

супер :-)

Отговор