我想将特定日期的文件从一个目录复制到另一个目录。谁能建议我使用 Unix 命令吗?
答案1
执行此类操作的最佳方法是使用命令find
。它有很多方法;我将解释其中两个:
1)相对时间间隔
在这种方法中,您可以准确指定开始和结束时间戳,然后过滤掉不在modified/accessed/changed
该时间段内的每个文件。您可以使用该touch
命令来执行此操作,保存具有特定名称的文件时间戳。
在下一个示例中,我们创建两个标记 (timestamp_begin_file
和timestamp_end_file
),设置为3 HOURS AGO
和1 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
选项来复制这些文件。