Команда Linux для поиска текста в самом последнем файле, соответствующем шаблону имени - PullRequest
0 голосов
/ 11 июля 2010

У меня есть каталог с такими файлами:

parent
    /dir1
        file1
        file2
        other
        something
        name_pattern.o23409284
        name_pattern.o29203429
        name_pattern.o39208235
    /dir2
    ...

Я хочу запустить команду, которая будет искать в новейшем файле name_pattern.o * строку, начинающуюся с:

***END

Так что, кажется, достаточно просто сделать

grep -c '***END' name_pattern.o*

, но я хочу посмотреть только на самый последний файл и проигнорировать все остальные.Поэтому я думаю, что мне нужна какая-то команда find, которая выберет самый новый файл.Я просто не знаю, как это сделать.

Ответы [ 2 ]

4 голосов
/ 12 июля 2010

Даже следующее также может сделать это.

ls -t | head -n1 name_pattern.o*

это выберет файлы, которые начинаются с данного шаблона, последняя метка времени идет первой, и только первый файл.Итак, наконец, сделайте это,

grep -c '***END' `ls -t | head -n1 name_pattern.o*`
2 голосов
/ 11 июля 2010
perl -e 'print( ( sort { -M $a <=> -M $b } @ARGV )[0], "\n");' name_pattern.o*

Это сортирует их по времени последней модификации.Поменяйте местами $ a и $ b, чтобы он дал самый старый.Существуют также флаги модификации для «поиска», но мне трудно найти, чтобы находились операции сравнения в каталоге…

Если вам нужно в одну строку:

grep '***END' `perl -e 'print( ( sort { -M $a <=> -M $b } @ARGV )[0], "\n");' name_pattern.o*`
...