Showing posts with label xargs. Show all posts
Showing posts with label xargs. Show all posts

Wednesday, September 19, 2007

Пакетная обработка файлов, обратный grep

Линух знаю плохо, но стараюсь учиться. Поэтому долго и нудно ищу решения повторяющихся проблем.
1. Проблема. : Нужно применить одну команду к списку файлов.
Решение xargs:
Пример :
Данные
ls -la
1.deb
2.deb
Установка всех деб пакетов.
ls *.deb | xargs sudo dpkg -i
Данные
Директория с исходниками, нужно найти файлы где встречается строка "xxxx"
find ./ (найти все файлы )
find ./ | xargs grep "xxxx" (найти все файлы в каждом файле найти строчку "xxxx"
2. Проблема
Встречаются директории и имена файлов разделенных пробелами, xargs считает это разными входыми парамертами,
Например

$:~/tests$ ls
xxx xx x
$:~/tests$ find ./ | xargs ls
ls: ./xx: No such file or directory
ls: x: No such file or directory
./:
xxx xx x
./xxx:
cd@cd-laptop:~/tests$

Решение
Решение найдено тут : http://linux.presscom.org/25924.html
Чтобы не забыть пишу для себя.


Проблема очевидна, пробел в имени совпадает с разделителем аргументов.
Решение простое - и find и xargs умеют создавать и принимать список аргументов, разделеных нуль-байтом.
$ find ./ -name "t*" -print0 | xargs -0 ls
./test ./te st

Т.е. для моего примера это будет
$find ./ -print0 | xargs -0 lj

3. Проблема
Нужен инверированный grep (обратный)
Решение
grep -v (долго искал, ман плохо читал )
Например
Поиск строки в исходниках, не показывая svn каталоги
find ./ | grep -v 'svn' | xargs grep "xxxx"
(найти все файлы, исключить строки где есть svn, в каждом файле из полученного списка применить поиск "xxx")
 
Каталог сайтов, Добавить сайт