Приклад обробки групи файлів bash

Приклад обробки групи файлів за допомогою команди find

 user@host:~$ find $pwd -type f -name "*.html" -exec iconv --from-code=CP1251 --to-code=UTF-8 {} -o {}.new \;

або у циклі

 user@host:~$ for f in `ls -1 *.html`; do iconv --from-code=CP1251 --to-code=UTF-8 $f -o $f.new; done

Команда:

 user@host:~$ find $pwd -type f -name "*.html"

знаходить файли із назвою відповідною вказаному шаблону:

 ./menu.html
 ./m_edit.html
 ./hotkey.html
 ./m_help.html

Параметр -exec дозволяє виконувати для знайдених файлів інші команди bash . Наприклад:

 user@host:~$ find $pwd -type f -name "*.html" -exec echo '*'{}'*' \;

дає такий результат:

 *./menu.html*
 *./m_edit.html*
 *./hotkey.html*
 *./m_help.html*

Цикл все ж, зручніше (для мене :-) :

 for f in `ls -1 *.html`; do fn=${f%.*}; echo $fn; done

В циклі є можливість обробки як файлів так їхніх назв, є можливість використання не тільки параметрів, а і змінних, та виконання не однієї команди, а довільної послідовності команд.

Ось практичний приклад:

 for f in `ls -1 *.html`; do fn=${f%.*}; iconv --from-code=CP1251 --to-code=UTF-8 $f -o $fn.8; cat $fn.8 | sed -e 's/windows-1251/utf8/'>$fn.utf8; rm $f $fn.8; mv $fn.utf8 $f; done

Довгий рядочок. Але один!

Для зручності читання можна розділити на кілька рядків:

 for f in `ls -1 *.html`; do fn=${f%.*}; \
 iconv --from-code=CP1251 --to-code=UTF-8 $f -o $fn.8; \
 cat $fn.8 | sed -e 's/windows-1251/utf8/'>$fn.utf8; \
 rm $f $fn.8; mv $fn.utf8 $f; \
 done

=-=-=-=-=
Powered by Blogilo

Вирішення проблеми з nls_lang в Oracle XE Client

В операційній системі Linux Debian Squeeze встановив Oracle XE Client

Виконання команди sqlplus викликало помилку:

/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/bin/nls_lang.sh: 112: [[: not found
/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/bin/nls_lang.sh: 112: [[: not found

На перший погляд проблема з налашнуваннями кодової сторінки та мови, але все зовсім не так.

Це проблема інтерпретатора. Ну зовсім як сьогодні політиці.

І вирішення просте.

Необхідно у файлі “nls_lang.sh” ( /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/bin/nls_lang.sh )

виправити рядок

#!/bin/sh

на

#!/bin/bash

Висновок: Не розумієш мову – вдосконалюй свій інтерпретатор, і не переводь проблему в політичну площину.

=-=-=-=-=
Powered by Blogilo

Приклад використання окремого .bash_history

У дописі "Окремі файли .bash_history для різних сеансів konsole" описано як налаштувати запис історії виконання команд в Konsole у різні файли.

Але, виникли питання: "навіщо?", та "як це працює?".

Тому опишу приклад використання окремого .bash_history для управління сервером бази даних h2.

Спочатку необхідно створити профілі Konsole і обов’язково вказати "Початковий каталог:". Цей параметр визначає у який файл будуть записані команди виконані в Konsole.

В результаті такого налаштування в домашній теці користувача Konsole створює наступні файли:

user@host:~$ ls -l .bash_history*
-rw------- 1 user user 25806 лют 12 22:39 .bash_history
-rw------- 1 user user   165 бер  3 21:17 .bash_history.backup
-rw------- 1 user user  4919 тра 16 13:29 .bash_history.h2
-rw------- 1 user user   470 тра 12 10:39 .bash_history.sqlshell
-rw------- 1 user user   214 тра  8 17:51 .bash_history.svn
-rw------- 1 user user  9822 бер 24 18:37 .bash_history.websites
-rw-r--r-- 1 user user   220 січ  9 12:15 .bash_logout
-rw-r--r-- 1 user user  3860 лют 26 09:42 .bashrc
user@host:~$

Тепер можна для виконання чітко визначениз завдань використовувати налаштовані для цього профілі:

Фрагмент історії:

user@host:/mnt/storage/h2$ history
  ...
  156  2012-04-01 22:31:36 exit
  157  2012-05-16 11:24:12 bash start-h2server-sh
  158  2012-05-16 11:24:18 bash backup_h2-sh
  159  2012-05-16 13:21:31 bash stop-h2server-sh
  160  2012-05-16 13:25:11 history
user@host:/mnt/storage/h2$

Приклад виконання команд:

user@host:/mnt/storage/h2$ bash start-h2server-sh
user@host:/mnt/storage/h2$ TCP server running at tcp://127.0.1.1:9092 (only local connections)

user@host:/mnt/storage/h2$ bash backup_h2-sh
~/storage/h2/backup/data/mon_20120516_164.zip
~/storage/h2/backup/data/dictionary_20120516_164.zip
~/storage/h2/backup/data/notes_20120516_164.zip
complete.

user@host:/mnt/storage/h2$ bash stop-h2server-sh
Shutting down TCP Server at tcp://localhost:9092

user@host:/mnt/storage/h2$

=-=-=-=-=
Powered by Blogilo