1

grep当通过命令应用到选定的文件时,我们希望显示每个文件的修改日期和时间find。最终结果应如下所示:

2016-10-17 Mon 20:38:57 ./rest/47results.php: 5 :σχόλια, ιδέες facebook

从 47test.php 文件运行以下命令:

system('export TZ=":Europe/Athens"; find . -name "*.*" \
-not \( -path ./admin -prune \) \
-not \( -path ./people/languages -prune \) \
-not \( -path ./include -prune \) \
-type f -mmin -10 \
-printf "%TY-%Tm-%Td %Ta %TH:%TM:%TS %p\n" \
-exec grep -HTni "σχόλια" {} + ');

我们为每个修改的文件和每一行打印不同的行

2016-10-17 Mon 21:09:55.0000000000  ./47test.php
2016-10-17 Mon 20:40:30.0000000000  ./places/00testout.txt
2016-10-17 Mon 20:38:57.0000000000  ./rest/47results.php
./47test.php:  22  :-exec grep -HTni "σχόλια" {} + ');
./rest/47results.php:  5  :σχόλια, ιδέες facebook
./rest/47results.php:  6  :σχόλια, ιδέες twitter
./rest/47results.php:  7  :Τα σχόλια σας

每个结果find一个,每个grep结果一个。

如开头所述,如何一个打印排序、组合结果为每个仅一行grep

2016-10-17 Mon 21:09:55 ./47test.php  22  :-exec grep -HTni "σχόλια" {} + ');
2016-10-17 Mon 20:38:57 ./rest/47results.php:  5  :σχόλια, ιδέες facebook
2016-10-17 Mon 20:38:57 ./rest/47results.php:  6  :σχόλια, ιδέες twitter
2016-10-17 Mon 20:38:57 ./rest/47results.php:  7  :Τα σχόλια σας
4

1 回答 1

2

您可以使用此find+grep组合来获得格式化的结果:

while IFS=$'\06' read -r -d '' t f; do
   sed "s/^/$t /" <(grep -HTni 'σχόλια' "$f")
done < <(find . -type f -mmin -10 -not \( -path ./admin -prune \) \
         -not \( -path ./people/languages -prune \) \
         -not \( -path ./include -prune \) \
         -printf '%TY-%Tm-%Td %Ta %TH:%TM:%.2TS\06%p\0')
  • 注意使用\06作为字段分隔符来处理带有空格/换行符等的文件名/路径。
  • \0(NULL) 出于同样的原因用作行终止符。
  • %.2TS用于触发第二个值的小数部分。
  • sed用于在输出的行开头插入日期/时间grep

PHP代码:

$cmd = <<<'EOF'
export TZ=":Europe/Athens"; \
find . -type f -mmin -10 -not \( -path ./admin -prune \) \
       -not \( -path ./people/languages -prune \) \
       -not \( -path ./include -prune \) \
       -printf '%TY-%Tm-%Td %Ta %TH:%TM:%.2TS\06%p\0' |
while IFS=$'\06' read -r -d '' t f; do grep -HTni 'σχόλια' "$f" | sed "s/^/$t /"; done
EOF;

// var_dump( $cmd );

echo shell_exec($cmd) . "\n";
于 2016-10-20T18:26:14.923 回答