view mobile version net4me Enable JavaScript in your browser! Linux education center net4me.
 
net4me logo

tux

linux commands
shell script
protocol
ip, tcp, smtp, ntp, ftp
telnet terminal
java and javascript
ajax web technology
documentation
howto, man, info
cisco in network
linux server
linux in home
online utility
and more more more.
python development
туе4ьу дштгч

  Содержание подраздела:

Scripts - BASH Tips

Bash tips. Page 1
Заметки "для себя чтоб не забыть".

-------- Мои типсы для себя. -------
============================================
Сделать из нескольких pdf файлов один (объединить)
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=BPEL_lessons.pdf -f `ls Lesson??.pdf`
Можно еще и -q добавить для подавления вывода сообщений.
============================================
вариант цикла от и до:
for i in `seq $sta $sto`;
do
...
sleep 0.7s
done
============================================
Включение режима отладки в bash:
#!/bin/bash -x
or
#!/bin/bash
set -x
============================================
Переименовать все файлы в директории в нижний регистр:
for x in *.log; do mv $x `echo $x | tr [A-Z] [a-z]`; done
============================================
Есть куча файлов с разветвленной структурой каталогов.
Как проще всего переименовать все файлы и каталоги так, чтобы имена были только маленькими буквами?
Например, для всех файлов *.txt рекурсивно в данной директории это будет выглядеть где-то так:
for x in `find ./ -name "*.txt" `;do tf=`echo $x | tr [A-Z] [a-z]`; mv $x $tf ; wait; done
P.S. В качестве проверки работоспособности сначала написал так:
for x in `find ./ -name "*.txt" `;do tf=`echo $x | tr [A-Z] [a-z]`; echo $x." ----> ".$tf ;wait; done

Но в таком варианте не учитываются файлы, в именах которых есть пробелы. И получается путаница...
Поэтому, делать надо так:
find ./ -type f -print0 | while read -d '' FILE; do FILE2=`echo "$FILE"|tr [A-Z] [a-z]`; mv $FILE $FILE2; wait; done
В таком виде скрипт учитывает все файлы.
Вместо части "mv $FILE $FILE2;" можно подставлять любые операции с файлами и их именами. Очень удобно.
============================================
bash и случайные пароли:
head -c8 /dev/random | uuencode -m - | sed -n '2s/=*$//;2p'q
генерирует случайный пароль из 12 символов.
Еще один вариант:
tr -c -d 'a-zA-Z0-9' < /dev/urandom | head -c 12
============================================
Нестандартный способ почесать левое ухо правой ногой:
#!/bin/sh
# Сменить кодировку всех файлов в директории:
# переименовываем все name.html в NAME.HTML:
for x in *.html; do mv $x `echo $x | tr [a-z] [A-Z]`; done
# копируем каждый ФАЙЛ в файл с заменой кодировки:
for x in *.HTML; do cat $x |iconv -f koi8-r -t cp1251 > `echo $x | tr [A-Z] [a-z]`;wait; done
# Удаляем старые ФАЙЛЫ за ненадобностью:
rm *.HTML
===========================================
Бэкапы. Удаление старых файлов. Чистка логов.
for FIL in `ls -t $BACKUPDIR/$DBNAME-*.dmp` ;
do
        let "COUNT=$COUNT + 1";
        echo "COUNT= $COUNT FIL= $FIL"  >> $MYLOGFILE;
        if [ -e "$FIL" ] && [ "$COUNT" -gt "$COL" ] ; then
                # Очередной файл существует и при этом кол-во файлов уже больше $COL
                echo "==== Файлов больше чем $COL удаляем старые. ===" >> $MYLOGFILE;
                # Тут надо удалять каждый файл пока условие верно.
                echo "# Remove $FIL " >> $MYLOGFILE;
                rm -f $FIL 2>> $MYLOGFILE;
                wait;
        fi
done
==========================================
заметки. команда screen:

screen -ls =list
screen -r = подцепиться к основному
C-a d =detach
C-a ' =(select) Prompt for a window name or number to switch to.
C-a 0-9 = Switch to window number 0 - 9.
C-a D D =(pow_detach) Detach and logout.
C-a h =(hardcopy) Write a hardcopy of the current window to the file "hardcopy.n".
C-a H =(log)Begins/ends logging of the current window to the file "screenlog.n".
C-a i OR
C-a C-i =(info) Show info about this window.
C-a k OR
C-a C-k =(kill)Destroy current window.
C-a l OR
C-a C-l =(redisplay)Fully refresh current window.
==========================================
вывести список файлов с полными путями.

Для bash скрипта надо список в виде:
каталог/файл3
каталог/каталог/файл1
каталог/каталог/файл2
Как сделать?

Почему-то часто незаслуженно забывается команда find:
find каталог/
всё просто.
======================================
Постоянно забываю про перекрытие вывода...
создать /dev/null:
mknod FILE c 1 3
солярка:
mknod FILE c 13 2
подавление вывода на консоль:
oesucr change-email.txt -change > /dev/null 2>&1;
======================================

Столкнулся с необходимостью перевести число из одной системы счисления в другую...
Оказалось, что с этим прекрасно справляется bc:
$ echo "ibase=2; 1001111"|bc
79
$ echo "ibase=16; F3"|bc
243
$ echo "ibase=16; FF"|bc
255
$ echo "ibase=10;obase=16; 255"|bc
FF
$ echo "ibase=16;obase=2; FF"|bc
11111111
=====
$ echo $((2#11111111))
255
$ echo $((16#FF))
255
=====
$ echo "obase=2 ; $((16#FF))"|bc
11111111
$ echo "obase=16 ; $((2#11111111))"|bc
FF
=====================================
ширина вывода в терминал.
ls /usr/bin | pr -t20 -w$COLUMNS
cat /etc/httpd.conf |grep -vE '^$^|#'| pr -t2 -w$COLUMNS
пояснение:
$COLUMNS в линуксе означает ширину терминала в символах (напр., 80 или 156)
=====================================
Подсчет количества совпадений слова во всех файлах директории.
(например, в логах аськи =) )
echo `grep -hirc 'пив' ./`|sed s/\ /\ +\ /g|bc
=====================================
Переименовать все файлы так, чтобы добавить в начало имени каждого файла какой-то текст:
было:
p100x70x60.JPG
p100x80x70 (2).JPG
p110x100x100.JPG

$ rename 's/^/kamenural_/' *.JPG
станет:
kamenural_p100x70x60.JPG
kamenural_p100x80x70 (2).JPG
kamenural_p110x100x100.JPG

$ rename 's/JPG/jpg/' *.JPG
переименует все файлы JPG в jpg
kamenural_p100x70x60.jpg
kamenural_p100x80x70 (2).jpg
kamenural_p110x100x100.jpg
Примечание:
Почему-то rename перестала работать как раньше.
То есть раньше я бы просто написал:
$ rename JPG jpg *.JPG
То есть rename ЧТО НА_ЧТО КАКИЕ_ФАЙЛЫ
Но теперь это почему-то не работает.
Теперь сплошные regexp'ы
======================================


home back top
При копировании материалов нашего портала, сылка на net4me обязательна.
Рейтинг@Mail.ru   Valid HTML 4.01 Transitional     Яндекс цитирования   best billing

 



...

net4me snowflake
rfc2368
 
net4me portal This page last modified: Tuesday, December 6, 2011   be in net. net4me

portal net4me linux education center