Programowanie (PHP, Java...), System (GNU, BSD, Windows...)

O optymalizacji polecej w bash'u

22 lipca, 2006 o 08:05:25 Dodaj komentarz Poziom: 0 Permalink

Potrzebowałem zamienić w plikach java-pkg-2-2 na java-pkg-2

find /var/db/pkg/ -exec perl -pi -e 's@java-pkg-2-2@java-pkg-2@' \;

Zajmuje to jednak trochę czasu (dla każdego pliku jest wywoływany perl).

Dlatego postarałem się o taką konstrukcję (tymczasową) :

# find /var/db/pkg/ | xargs grep java-pkg-2-2 /var/db/pkg/dev-java/rhino-1.5.5-r2/rhino-1.5.5-r2.ebuild:inherit ... /var/db/pkg/dev-java/antlr-2.7.5-r2/antlr-2.7.5-r2.ebuild:inherit ... /var/db/pkg/dev-java/servletapi-2.3-r2/servletapi-2.3-r2.ebuild:inherit ... /var/db/pkg/dev-java/libreadline-java-0.8.0-r1/libreadline-java-0.8.0- ... /var/db/pkg/dev-java/servletapi-2.4-r2/servletapi-2.4-r2.ebuild:inherit ... /var/db/pkg/dev-java/bsh-2.0_beta4/bsh-2.0_beta4.ebuild:inherit ... /var/db/pkg/dev-java/ant-core-1.6.5-r13/ant-core-1.6.5-r13.ebuild:inherit ...

Od razu widać, że nie potrzeba nam zawartości. Pozatym 2 procesy nie będą korzystały z tego pliku jednocześnie, więc możemy korzystać z Mapped I/O (wywołanie systemowe mmap(2)

# find /var/db/pkg/ | xargs grep --mmap java-pkg-2-2 | sed 's@:.*@@g;' /var/db/pkg/dev-java/rhino-1.5.5-r2/rhino-1.5.5-r2.ebuild /var/db/pkg/dev-java/antlr-2.7.5-r2/antlr-2.7.5-r2.ebuild /var/db/pkg/dev-java/servletapi-2.3-r2/servletapi-2.3-r2.ebuild /var/db/pkg/dev-java/libreadline-java-0.8.0-r1/libreadline-java-0.8.0-r1.ebuild /var/db/pkg/dev-java/servletapi-2.4-r2/servletapi-2.4-r2.ebuild /var/db/pkg/dev-java/bsh-2.0_beta4/bsh-2.0_beta4.ebuild /var/db/pkg/dev-java/ant-core-1.6.5-r13/ant-core-1.6.5-r13.ebuild

I przekazujemy to do perla:

# find /var/db/pkg/ | xargs grep --mmap java-pkg-2-2 | sed 's@:.*@@g;' \ | xargs perl -pi -e 's@java-pkg-2-2@java-pkg-2@'

I nie mamy już czasu zaparzyć kawy... (Pierwsze zajmowało strasznie długo)