根据日期和时间在多个文件夹中打印具有相同扩展名的文件的内容

时间:2014-07-31 05:39:06

标签: shell unix directory

我是否可以知道如何使用shell脚本将多个目录中具有相同扩展名的文件(例如.coords)的内容打印到文本文件中,限制为创建目录的特定日期和时间。

感谢您的回复。

编辑:

ls -ltr
total 16
drwxrwxr-x 2 prakkisr prakkisr 4096 Jul 28 13:23 A
drwxrwxr-x 2 prakkisr prakkisr 4096 Jul 29 09:56 B
drwxrwxr-x 2 prakkisr prakkisr 4096 Jul 31 12:15 C
drwxrwxr-x 2 prakkisr prakkisr 4096 Jul 31 14:34 D

所有文件夹A,B,C,D都有一个以.coords结尾的文件(A文件夹中的a.coords,B文件夹中的b.coords等)。

首先,我只想访问7月31日生成的那些文件夹(即C和D文件夹),并希望将这些文件夹中的c.coords和d.coords文件的内容打印到文本文件中。 (这是根据日期)

其次,是否可以根据时间打印它。就像假设一样,我只想要文件夹(在这种情况下为'D'文件夹)中的那些“.coords”文件,这些文件是在今天14:00之后生成的并打印到另一个文件中。 (这是根据日期和时间)

1 个答案:

答案 0 :(得分:1)

以下命令将打印目录中具有修改日期的所有*.coords个文件的内容:

find . -type d -mtime 0 -exec sh -c 'cat {}/*.coords 2>/dev/null' \;

如果您想查看*.coords文件的名称而不是其内容,请使用:

find . -type d -mtime 0 -exec sh -c 'ls {}/*.coords 2>/dev/null' \;

可以通过许多其他方式指定目录的年龄。例如:

  • 要以分钟为单位指定目录年龄,请使用-mmin代替-mtime

  • 要指定目录创建日期而不是上次修改日期,请使用-cmin-ctime

  • 如果您的文件系统支持它,也可以根据上次访问时间选择目录。使用-amin-atime

  • 还可以通过在年龄前加上+-符号来选择某些时间范围内的目录。要选择创建日期不超过两天的目录,请使用-ctime -2。通过包含两个这样的说明符,您可以从一系列日期中进行选择。

有关详细信息,请参阅man find

变异

假设我们想要基于文件的日期进行搜索,而不是文件所在的目录的日期。在这种情况下,可以使用更简单的命令来打印匹配文件的内容:

find . -name '*.coords' -mtime 0 -exec cat {} \;

假设我们要打印文件的名称及其内容。然后,我们将对find命令的操作包含在内:

find . -name '*.coords' -mtime 0 -print -exec cat {} \;

请注意*.coords周围使用引号。这样可以确保在当前目录中恰好包含.coords文件时该命令可以正常工作。