将文件修改日期和 "grep" 结果通过 "find" 组合在一行中
Combine file modified date and "grep" results through "find", in one line
我们希望在通过 find
命令将 grep
应用于所选文件时显示每个文件的修改日期和时间。最终结果应如下所示:
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 :Τα σχόλια σας
您可以使用此 find+grep
组合来获得格式化结果:
while IFS=$'' 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%p[=10=]')
- 请注意使用
</code> 作为字段分隔符来解决 filenames/paths 和 whitespaces/newlines 等 </li>
<li><code>[=14=]
(NULL) 出于同样的原因被用作行终止符。
%.2TS
用于跳闸第二个值的小数部分。
sed
用于在 grep
输出的行首插入 date/time。
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%p[=11=]' |
while IFS=$'' read -r -d '' t f; do grep -HTni 'σχόλια' "$f" | sed "s/^/$t /"; done
EOF;
// var_dump( $cmd );
echo shell_exec($cmd) . "\n";
我们希望在通过 find
命令将 grep
应用于所选文件时显示每个文件的修改日期和时间。最终结果应如下所示:
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 :Τα σχόλια σας
您可以使用此 find+grep
组合来获得格式化结果:
while IFS=$'' 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%p[=10=]')
- 请注意使用
</code> 作为字段分隔符来解决 filenames/paths 和 whitespaces/newlines 等 </li> <li><code>[=14=]
(NULL) 出于同样的原因被用作行终止符。 %.2TS
用于跳闸第二个值的小数部分。sed
用于在grep
输出的行首插入 date/time。
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%p[=11=]' |
while IFS=$'' read -r -d '' t f; do grep -HTni 'σχόλια' "$f" | sed "s/^/$t /"; done
EOF;
// var_dump( $cmd );
echo shell_exec($cmd) . "\n";