当前位置: 首页 > 面试题库 >

通过“查找”将文件修改日期和“ grep”结果合并在一起

公德明
2023-03-14
问题内容

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 :Τα σχόλια σας



问题答案:

您可以使用此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')
  • 请注意使用\06as字段分隔符来使用空格/换行符等来寻址文件名/路径。
  • \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";


 类似资料:
  • 问题内容: 我想检查日期是否在开始日期和结束日期之间。 我添加了一个where子句 但问题在于它不包含“ 2010-04-15”。 它应该包括结束日期,我该怎么办? 请帮我 问候, 潘卡 问题答案: 明确指定时间部分:

  • 问题内容: 我正在尝试使用Python 2.7.1(在Windows上,fyi)从zip文件中提取文件,而我的每一次尝试都显示了具有Modified Date =提取时间的提取文件(不正确)。 我也尝试使用.extractall方法,结果相同。 谁能告诉我我在做什么错? 我想认为这是可能的,而不必重新校正每个[Windows文件的文件创建日期?](http://codingdict.com/que

  • 问题内容: 我正在处理一个查询,其中需要查看患者去诊所时输入的患者生命体征(特别是血压)。我将获得2015年全年的结果,当然,某些患者曾多次就诊,我只需要查看最近一次就诊时输入的生命指标即可。另一个轻微的变化是收缩压和舒张压是分别输入的,因此我得到如下结果: 有26,000多个结果,因此显然我不想遍历每位患者并查看他们的最新结果是什么时候。我希望我的结果看起来像这样: 我知道出生的名字和日期,以后

  • 问题内容: 我有一系列记录,其中包含一些具有时间有效性的信息(产品类型)。 如果分组信息(产品类型)保持不变,我想将相邻的有效期合并在一起。我不能与和一起使用简单的方法,因为某些产品类型(在示例中为)可以“消失”和“返回”。 使用Oracle 11g。 输入数据 : 预期结果 : 请参阅完整的SQL Fiddle。 问题答案: 这是一个孤岛问题。有多种方法可以解决此问题。这使用和分析功能: SQL

  • 问题内容: 我在表中有此数据 每当FIELD_D中的值更改时,它就会组成一个组,而我需要该组中的最小和最大日期。查询应该返回 到目前为止,我看到的示例在Field_D中的数据是唯一的。这里的数据可以重复显示,首先是“ N”,然后变为“ P”,然后又回到“ N”。 任何帮助将不胜感激 谢谢 问题答案: 如果SQL实现支持分析功能,则可以使用LAG,LEAD和COUNT()OVER这样的解析函数,以发

  • 问题 你需要写一个涉及到文件查找操作的脚本,比如对日志归档文件的重命名工具, 你不想在Python脚本中调用shell,或者你要实现一些shell不能做的功能。 解决方案 查找文件,可使用 os.walk() 函数,传一个顶级目录名给它。 下面是一个例子,查找特定的文件名并答应所有符合条件的文件全路径: #!/usr/bin/env python3.3 import os def findfil