如何打印匹配grep模式的文件的文件详细信息

时间:2016-08-25 12:29:09

标签: bash shell loops grep xargs

我想打印文件详细信息以及grep输出但无法这样做。例如,命令

grep 3456 A.txt

我得到了输出

A.txt

但想要输出

-rw-rw-r-- 1 tarun tarun   41356911 Aug 25 01:31 A.txt

我尝试了以下但没有成功:

  1. grep 34567 A.txt | xargs ls -tlr

  2. grep 34567 A.txt | while read line ; do echo "$line" | date %s.%N ; done

  3. grep -Hr 34567 A.txt | awk -F: '{"stat -c %z "$1 | getline r; print r": "$0 }'

  4. grep 34567 A.txt | awk -F: '{"date -r \""$1"\" +\"%F %R\"" | getline d; print d,$0}'

2 个答案:

答案 0 :(得分:5)

grep -Zl 3456 * | xargs -0 ls -l

使用GNU grep。选项包括:

  • grep -Zxargs -0:用NULL字节而不是空格分隔输出名称。这样您就可以处理包含空格的文件名。
  • grep -l:仅打印与
  • 匹配的文件名
  • ls -l:标准ls长输出,似乎是您所要求的。

测试了最新的cygwin。

答案 1 :(得分:0)

这里不需要xargs; find可以用来运行grep和运行ls,甚至可以用来发送ls样式输出。

find . -maxdepth 1 -type f \
       -exec grep -q -e '1234567' -- '{}' ';' \
       -exec ls -l {} +

...或者,甚至更好:

find . -maxdepth 1 -type f \
       -exec grep -q -e '1234567' -- '{}' ';' \
       -ls

-ls操作使用类似于ls -l的输出格式。