如何在 Unix 中将特定日期的文件从一个路径复制到另一个路径

如何在 Unix 中将特定日期的文件从一个路径复制到另一个路径

我想将特定日期的文件从一个目录复制到另一个目录。谁能建议我使用 Unix 命令吗?

答案1

执行此类操作的最佳方法是使用命令find。它有很多方法;我将解释其中两个:

1)相对时间间隔
在这种方法中,您可以准确指定开始和结束时间戳,然后过滤掉不在modified/accessed/changed该时间段内的每个文件。您可以使用该touch命令来执行此操作,保存具有特定名称的文件时间戳
在下一个示例中,我们创建两个标记 (timestamp_begin_filetimestamp_end_file),设置为3 HOURS AGO1 HOUR AGO。然后我们使用newerct! newerct选项来选择文件较新的然后3个小时不更新change然后是 1 小时(在这个例子中我们只看时间)。所有选定的文件将被复制到$DESTINATION_PATH文件夹中。

touch -t $(date -d '3 HOUR AGO' +%Y%m%d%H%M.%S) timestamp_begin_file
touch -t $(date -d '1 HOUR AGO' +%Y%m%d%H%M.%S) timestamp_end_file
find "$FOLDER" -newerct timestamp_begin_file ! -newermt timestamp_end_file -exec cp {} $DESTINATION_PATH \;

2)绝对时间间隔
您可以使用newermt选项来过滤掉特定日期间隔内不需要的文件。这里我们仅选择当天修改的文件2007-06-07

find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08 -exec cp {} $DESTINATION_PATH \;  

正如我所说,存在许多其他替代方案(正如@Jaleks 所建议的-a/m/ctime那样,但由于缺乏信息,我们无法知道哪种情况适合您)。

欲了解更多信息时间过滤find,看看find 的联机帮助页

答案2

查看 的联机帮助页find,其中包含 、 等参数-atime-mtime或者-ctime查找在某个给定时间被访问、修改或更改的文件,然后您可以进一步使用该-exec选项来复制这些文件。

相关内容