我是否可以知道如何使用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之后生成的并打印到另一个文件中。 (这是根据日期和时间)
答案 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
文件时该命令可以正常工作。