我有文件夹,文件每天每小时都会出现在这里。之后,我只想将一小时前创建日期的文件复制到其他文件夹。例如:当前日期时间是 9:20:00AM,我想复制创建日期从 8:00:00AM 到 8:59:59AM 的文件。我对shell linux不熟悉。
#!/bin/bash
logfile="/usertest/log/"`date +"%Y%m%d"`.log
(
srcRoot=/usertest/source
destRoot=/usertest/dest
copyFile(){
local src=$srcRoot/$1
local dest=$destRoot/$2
local now1=$(date)
echo "Current date time " "$now1"
echo src: $src
echo dest: $dest
#For example: current datetime is 2023-08-14 09:20:33 AM
#find files created date from 2023-08-14 08:00:00AM to 08:59:59AM
#copy files from source to destination
#print message copy filename from source to dest
find "$src" -mtime $(date +%H)-1 ":59:59" -mtime $(date +%H)-1 ":00:00" -exec cp -p {} "$dest" \;
echo "copy from " "$src" "file name" "to" "$dest" "file name"
}
copyFile subfolder/folderx foldery
) >> $logfile 2>&1
答案1
您可以使用 GNUfind
实用程序,该实用程序应预安装在您的系统上。
如果您打开终端,并导航到要搜索的文件夹(用于cd
该文件夹),则以下内容将查找该目录下最近一小时内创建的所有文件。
find . -type f -newerct '1 hour ago'
当您替换为时,-newerct
它-newermt
会显示最近一小时内修改的所有文件。
当您输入 时,您可以了解有关 find 的更多信息man find
,它有很多很酷的选项。另一种是-not
标志,可用于反转表达式。
答案2
通过该实用程序的任何标准实现date
,可以通过以下方式获取以明确的标准本地时间格式格式化的当前小时的开始时间:
this_hour_start=$(date +%Y-%m-%dT%H:00:00%z)
要获取该时间之前一小时的时间戳,使用 GNU date
,您可以执行以下操作:
previous_hour_start=$(
date -d "$this_hour_start -1 hour" +%FT%T%z
)
一旦两者都具备,使用 GNU find
,您可以使用以下命令找到前一小时内创建的常规文件(包含最后修改的内容):
find . -type f \
-newermt "$previous_hour_start" \
! -newermt "$this_hour_start"
要将它们复制到其他地方,请使用 GNUcp
添加-exec cp -t /elsewhere {} +
到上述命令中。