Составляем скрипт (разнообразные вопросы по утилитам)

Готовые решения для многих вопросов, которые очень часто задаются снова и снова.

Модератор: Модераторы разделов

Аватара пользователя
diesel
Модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Составляем скрипт

Сообщение diesel » 24.05.2006 21:12

nerezus писал(а):
24.05.2006 21:07
Как убить процессы, имя исполняемого файла которых начинается на sv_. Одной коммандой.

Просто надоело список процессов ps aux |grep sv_
а потом kill -9 пид1 пид2 пид3...

Как это в 1 комманду объединить? =)


ps aux |grep sv_|awk '{print $2}'|kill

или kill `ps aux |grep sv_|awk '{print $2}'`

$1, $2 - смотря какой там колонкой pid идет 1-й, 2-й ...
Спасибо сказали:

Date Naoki
Сообщения: 15

Re: Составляем скрипт

Сообщение Date Naoki » 24.05.2006 23:02

Есть : текстовый файл диких размеров, построенный по принципу:

Слова, со знаками препинаниями и пробелами*СЛОВО

И так очень много строк.
Нужно получить файл с таким раскладом:

Слова, со знаками препинаниями и пробелами*слово

Делаю cat 1.txt | tr [:upper:] [:lower:] > 2.txt

Получается, но в первой части тоже теряю заглавные буквы =(
Как это нормальн осделать ? Эксперименты с tr не дали результата (
ArchLinux 0.7.2 (Gimmick) registered user #417672
Спасибо сказали:

Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Составляем скрипт

Сообщение elide » 24.05.2006 23:14

Код: Выделить всё

cat 1.txt | awk -F* '{print $1 "*" tolower($2)}' > 2.txt
слава роботам!
Спасибо сказали:

Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Составляем скрипт

Сообщение KiWi » 24.05.2006 23:22

elide писал(а):
24.05.2006 23:14

Код: Выделить всё

cat 1.txt | awk -F* '{print $1 "*" tolower($2)}' > 2.txt

* а me долго мудрил для нескольких звёздочек и намудрил

Код: Выделить всё

cat 1.txt awk -v ORS='' -F '*' '{ for(i = 1; i < NF; ++i) { print $i; print "*"; }; print tolower($NF); print "\n" }' > 2.txt

:-)
Спасибо сказали:

Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Составляем скрипт

Сообщение elide » 24.05.2006 23:22

для этого есть pgrep. а у него есть man.
слава роботам!
Спасибо сказали:

Аватара пользователя
diesel
Модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Составляем скрипт

Сообщение diesel » 24.05.2006 23:25

elide писал(а):
24.05.2006 23:22
для этого есть pgrep. а у него есть man.


команда о которой забываешь когда он нада :(
Спасибо сказали:

Date Naoki
Сообщения: 15

Re: Составляем скрипт

Сообщение Date Naoki » 24.05.2006 23:54

Фига себе. Первая команда прошла за 2 секунды и всё выполнила отлично.
Дело сделано. Спасибо.

Ради эксперимента перегрузился в винду и попробовал ОТКРЫТЬ этот файл ))))
Эксплорер, блокнот и AkelPad зависли нафиг.
Концептуально )
ArchLinux 0.7.2 (Gimmick) registered user #417672
Спасибо сказали:

Аватара пользователя
boombick
Сообщения: 516
Статус: Anonymous
ОС: ArchLinux 0.8 Voodoo

Re: Составляем скрипт

Сообщение boombick » 25.05.2006 11:25

а killall sv_* не поможет?
Спасибо сказали:

meskalin1974
Сообщения: 338
ОС: Xubuntu, WinXP 64bit

Re: Составляем скрипт

Сообщение meskalin1974 » 27.05.2006 18:28

Пишу скрипт. Какую маску файлов указывать, чтобы выделить все файлы, начинающиеся с точки? Если просто .*, то выделяются все файлы в тек. директории. Пробовал экранировать точку \.*, но то же самое.
AMD Athlon 64 x2 3800+, 2 GB RAM, 2x 200 SATA II Seagate RAID 0, GeForce 7900GS
Спасибо сказали:

Аватара пользователя
Shura
Сообщения: 1537
Статус: Оказывается и без KDE есть жизнь
ОС: FreeBSD 8.0-RC2

Re: Составляем скрипт

Сообщение Shura » 27.05.2006 18:33

а что за щелл?
у меня bash, когда делаю echo .* выводятся только те файлы, что начинаются с точки.
Rock'n'roll мертв © БГ
Спасибо сказали:

meskalin1974
Сообщения: 338
ОС: Xubuntu, WinXP 64bit

Re: Составляем скрипт

Сообщение meskalin1974 » 27.05.2006 18:40

Название шела в названии топика - bash. Надо чтоб не только файлы скрытые выбирались, но и папки. Просто .* выделяет вообще все в текущей папке.
AMD Athlon 64 x2 3800+, 2 GB RAM, 2x 200 SATA II Seagate RAID 0, GeForce 7900GS
Спасибо сказали:

Аватара пользователя
polachok
Бывший модератор
Сообщения: 2199
Статус: главный форумный маргинал
ОС: gnu/linux

Re: Составляем скрипт

Сообщение polachok » 27.05.2006 18:43

find . -name ".*"
И немедленно выпил.
Спасибо сказали:

DeadMoroZ
Сообщения: 2

Re: Составляем скрипт

Сообщение DeadMoroZ » 03.06.2006 19:41

Подскажите люди добрые, каким образом при поиске командой find возможно исключить определенные директории из поиска.
Спасибо сказали:

Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Составляем скрипт

Сообщение KiWi » 03.06.2006 20:37

У злостной команды find есть такой злостный -wholename, который в комбинации с ! (! -wholename) реализует совершенно незлую функцию исключения директорий, файлов и прочего.
Спасибо сказали:

DeadMoroZ
Сообщения: 2

Re: Составляем скрипт

Сообщение DeadMoroZ » 03.06.2006 22:20

Ну ладно ладно, улыбочки забыл поставить.
Можно закрывать.
Спасибо сказали:

Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Составляем скрипт

Сообщение KiWi » 03.06.2006 22:34

DeadMoroZ писал(а):
03.06.2006 22:20
Ну ладно ладно, улыбочки забыл поставить.
Можно закрывать.

А я не забыл -- мне просто лень их ставить.
Спасибо сказали:

Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Составляем скрипт

Сообщение deninok » 14.06.2006 12:48

Уважаемые участники форума!

Простой вопрос: как найти нужный текст в большом количестве текстовых файлов? Какие функции использовать?
Заранее благодарен.
Спасибо сказали:

Аватара пользователя
JaGoTerr
Сообщения: 380

Re: Составляем скрипт

Сообщение JaGoTerr » 14.06.2006 14:07

man grep

пример:
fgrep -R "my string" .
Спасибо сказали:

Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Составляем скрипт

Сообщение elide » 14.06.2006 14:09

хм... а что, ты знаешь как искать в файлах ненужный текст?

grep 'pattern' FILE-LIST
слава роботам!
Спасибо сказали:

Аватара пользователя
sentrydroid
Сообщения: 9

Re: Составляем скрипт

Сообщение sentrydroid » 15.07.2006 11:08

я хочу найти опр. файл находясь в корне, скажите, как это зделать из консоли?
что-то find я непонял как работает.
Спасибо сказали:

Аватара пользователя
alv
Бывший модератор
Сообщения: 7268
Статус: Пенсионер в законе
ОС: Cintu

Re: Составляем скрипт

Сообщение alv » 15.07.2006 11:25

sentrydroid писал(а):
15.07.2006 11:08
я хочу найти опр. файл находясь в корне, скажите, как это зделать из консоли?
что-то find я непонял как работает.

в вашем случае -
find / -name имя_файла

подробности - man find
Спасибо сказали:

Аватара пользователя
Мак Сим
Сообщения: 231
ОС: Ubuntu 9.04

Re: Составляем скрипт

Сообщение Мак Сим » 15.07.2006 12:50

Я бы ответил RTFM. А так alv уже всё сказал...
2:5020/8086.465
Мой открытый PGP-ключ тут
Dell Inspiron 2200 - Debian(testing)
Спасибо сказали:

Аватара пользователя
sentrydroid
Сообщения: 9

Re: Составляем скрипт

Сообщение sentrydroid » 15.07.2006 13:21

Мак Сим писал(а):
15.07.2006 12:50
Я бы ответил RTFM.


бывает и такое... мне про ето расказывали
Спасибо сказали:

iZEN
Сообщения: 225

Re: Составляем скрипт

Сообщение iZEN » 05.10.2006 22:08

Здрастьте.

Как с помощью комбинации команд find и rename можно переименовать файлы во вложенных каталогах?

Пасибо.
Спасибо сказали:

Аватара пользователя
polachok
Бывший модератор
Сообщения: 2199
Статус: главный форумный маргинал
ОС: gnu/linux

Re: Составляем скрипт

Сообщение polachok » 05.10.2006 22:28

man find ; man rename ?
И немедленно выпил.
Спасибо сказали:

iZEN
Сообщения: 225

Re: Составляем скрипт

Сообщение iZEN » 05.10.2006 22:30

polachok писал(а):
05.10.2006 22:28
man find ; man rename ?
Ниасилил регулярные выражения. :mellow:
$ find -name '*.JPEG' -exec rename 'y/A-Z/a-z/'' * {} \;
- какая-то хрень...
Спасибо сказали:

Аватара пользователя
router
Сообщения: 363
ОС: Debian, на работе rhel

Re: Составляем скрипт

Сообщение router » 06.10.2006 00:41

iZEN писал(а):
05.10.2006 22:30
$ find -name '*.JPEG' -exec rename 'y/A-Z/a-z/'' * {} \;

Код: Выделить всё

$ find ./ -type f -name '*.JPEG' -exec rename 'y/A-Z/a-z/'  {} \;



добавлено:
Упс, ступил. Тогда не знаю. Если можно не ограничиваться rename, то подойдёт вот этот монстр:

Код: Выделить всё

find ./ -type f -name '*.JPEG'| \
while read a;do \
    filename="`basename \"$a\"`"; dirname="`dirname \"$a\"`"; \
    newfilename="`echo \"$filename\" | tr [A-Z] [a-z]`"; \
    if [ "$filename" != "$newfilename"  ]; then \
          mv "${dirname}/${filename}" "${dirname}/${newfilename}"; \
    fi; \
done


Или так: myrename.pl

Код: Выделить всё

#!/usr/bin/perl

use strict;
my  ($fullname,$oldname,$newname,$dirname,$template);
if ($#ARGV<0) {$fullname="./"} else {$fullname="$ARGV[0]"};
if ($#ARGV<1) {$template="*"} else {$template="$ARGV[1]"};

for (`find "$fullname" -type f -name "$template"`) {
    chomp();
    ($dirname,$oldname) = /^(.*)\/([^\/]*)$/;
    ( $newname  = $oldname ) =~ tr/A-Z/a-z/;
    rename("${dirname}/${oldname}","${dirname}/${newname}");
}


Последний вариант, ессно, шустрее
Спасибо сказали:

Аватара пользователя
diesel
Модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Составляем скрипт

Сообщение diesel » 06.10.2006 03:25

Код: Выделить всё

dc vasya $ for i in `seq 1 10`; do touch $i.JPEG; done
dc vasya $ ls
10.JPEG  1.JPEG  2.JPEG  3.JPEG  4.JPEG  5.JPEG  6.JPEG  7.JPEG  8.JPEG  9.JPEG
dc vasya $ touch test\ 123.JPEG
dc vasya $ ls
10.JPEG  1.JPEG  2.JPEG  3.JPEG  4.JPEG  5.JPEG  6.JPEG  7.JPEG  8.JPEG  9.JPEG  test 123.JPEG
dc vasya $ ls *.JPEG|while read i; do echo mv "$i" "`echo $i|tr A-Z a-z`"; done
mv 10.JPEG 10.jpeg
mv 1.JPEG 1.jpeg
mv 2.JPEG 2.jpeg
mv 3.JPEG 3.jpeg
mv 4.JPEG 4.jpeg
mv 5.JPEG 5.jpeg
mv 6.JPEG 6.jpeg
mv 7.JPEG 7.jpeg
mv 8.JPEG 8.jpeg
mv 9.JPEG 9.jpeg
mv test 123.JPEG test 123.jpeg
dc vasya $ ls *.JPEG|while read i; do mv "$i" "`echo $i|tr A-Z a-z`"; done
dc vasya $ ls
10.jpeg  1.jpeg  2.jpeg  3.jpeg  4.jpeg  5.jpeg  6.jpeg  7.jpeg  8.jpeg  9.jpeg  test 123.jpeg


Сори что
1. без find'а - переделать легко ИМХО
2. без rename - у меня он работает не так как у Вас
Спасибо сказали:

Аватара пользователя
router
Сообщения: 363
ОС: Debian, на работе rhel

Re: Составляем скрипт

Сообщение router » 06.10.2006 07:38

diesel
С этим справляется и первоначальный вариант с find и rename. Проблема в том, что он при преименовании файлов в _подкаталогах_ имена подкаталогов тоже преобразовываются в нижний регистр
Спасибо сказали:

Аватара пользователя
diesel
Модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Составляем скрипт

Сообщение diesel » 06.10.2006 09:36

router писал(а):
06.10.2006 07:38
diesel
С этим справляется и первоначальный вариант с find и rename. Проблема в том, что он при преименовании файлов в _подкаталогах_ имена подкаталогов тоже преобразовываются в нижний регистр


дык искать нужно только файлы ...
find -type f
find -type f -name "*.JPEG"
я думал с rename пробелемы
Спасибо сказали: