Можно ли сделать grep
команда для вывода путей к файлам с датой изменения файла, например:
12-02-2015 /file/path/to/the/file
16-02-2015 /file/path/to/the/file
25-02-2015 /file/path/to/the/file
03-04-2015 /file/path/to/the/file
или:
/file/path/to/the/file 12-02-2015
/file/path/to/the/file 12-02-2015
/file/path/to/the/file 12-02-2015
/file/path/to/the/file 12-02-2015
grep
сам по себе не имеет для этого никаких функций. Но вы можете использовать awk
. Используйте этот синтаксис:
grep -Hr pattern . | awk -F: '{"stat -c %z "$1 | getline r; print r": "$0 }'
Это заставляет grep
напечатать имена файлов -H
. -r
означает повторный поиск в данном каталоге .
. awk
разделитель полей установлен на :
. Первый варибал $1
теперь содержит имя файла. awk
звонки stat -c %z
для каждого файла, что дает время модификации в удобочитаемом формате. Это сохраняется в переменной r
, который печатается перед каждым результатом поиска.
Оказывается, можно использовать find -exec
сделать это. Следующий пример не является полным, так как он не выводит в требуемом формате.
find . -exec grep -q set {} \; -exec stat -c "%y %n" {} \;
...
2019-06-03 11:46: 14.565890000 -0700 ./bin/tkdiff_helper.sh
2018-04-24 12: 00: 02.389077000 -0700 ./bin/start_vnc.older 2019-09-04
08: 41: 49.021891000 -0700 ./bin/calmdpv_2016
...
Второй exec запускается только в том случае, если grep находит совпадение.
-q
это довольно grep.
Вот более понятная альтернатива с использованием xargs
grep -rl pattern | xargs stat -c %n':'%z | awk -F: '{print $1}'
Утилита grep предназначена не для этого, а для фильтрации строк файла или вывода команды. Что вы можете сделать, так это объединить его с awk через канал, чтобы получить то, что вы хотите, например:
find . -iname 'file-you-want-to-find' -exec stat -c "%y %n" {} \; | awk '{ print $4 " " $1 }' | grep 'date-you-are-looking-for'
С уважением.