1

Добрый день! ab

Передо мной стоит следующая задача:
Мне необходимо вывести список файлов который возвращает команда grab в отсортированном по размеру файлов виде.
Я умудрился написать скрипт:

#!/bin/bash
grep -lw 'privet' $1/*
exit 0

На вход передается путь к директории, а на выходе (стандартный вывод) все файлы содержащие строчку "privet".
Это я сделал, но не могу сделать так, чтобы эти файлы выводились в отсортированном порядке, есть идея сделать связку ls -S с grep при помощи xargs но до меня не доходит как)

Заранее спасибо.

uname -a
Linux Misha 3.5.0-25-generic #39-Ubuntu SMP Mon Feb 25 19:02:34 UTC 2013 i686 i686 i686 GNU/Linux
misha@Misha:~/Документы$ 

2

Про xargs -- добавить несложно, но толку не будет, если размер аргументов превысит допустимый предел, будет несколько вызовов ls, и каждый следующий ничего не будет знать о предыдущих -- получится несколько отсортированных кусков:
grep -lw privet | xargs ls -S

3

bormant, может тогда в таком случае наоборот из ls -S передавать в grep?
чтобы grep искал в файлах в отсортированном порядке и выводил файлы по этому же порядку?

4

После долгих мучений решил задачу:

find $1 -type f | xargs -d '\n' ls -S1 | xargs -d '\n' grep -lw 'WORD'

5 (10.03.2013 14:44:24 отредактировано bormant)

Можно, даже для больших по числу файлов каталогов подойдет (если рекурсия не нужна):

ls -S | xargs grep -lw privet

6 (10.03.2013 14:53:52 отредактировано -=Serj=-)

$ ls -l
итого 16
-rw-r--r-- 1 sergey sergey 13 марта 10 14:53 f1.txt
-rw-r--r-- 1 sergey sergey 24 марта 10 14:53 f2.txt
-rw-r--r-- 1 sergey sergey 54 марта 10 14:53 f3.txt
-rw-r--r-- 1 sergey sergey 21 марта 10 14:54 f4.txt
$ grep -lw 'privet' *.txt
./f1.txt
./f3.txt
./f4.txt
$ ls -lS  `grep -lw 'privet' *.txt`
-rw-r--r-- 1 sergey sergey 54 марта 10 14:53 ./f3.txt
-rw-r--r-- 1 sergey sergey 21 марта 10 14:54 ./f4.txt
-rw-r--r-- 1 sergey sergey 13 марта 10 14:53 ./f1.txt
Да, у меня Ubuntu.
Нет, не глючит.

7

cmd1 | xargs cmd2
эквивалентно
cmd2 $(cmd1) или cmd2 `cmd1`
с той лишь разницей, что во втором случае легко нарваться на переполнение командной строки при большом количестве файлов и/или длинных именах.

8

bormant, спасибо, буду знать.

Да, у меня Ubuntu.
Нет, не глючит.