
하루 중 매 시간마다 파일이 나타나는 폴더가 있습니다. 그 후에는 생성 날짜가 1시간 전인 파일만 다른 폴더에 복사하고 싶습니다. 예를 들어 현재 날짜와 시간이 오전 9시 20분인데 생성 날짜가 오전 8시부터 오전 8시 59분 59초까지인 파일을 복사하고 싶습니다. 저는 쉘 리눅스에 익숙하지 않습니다.
#!/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
find
시스템에 사전 설치되어 있는 GNU 유틸리티를 사용할 수 있습니다 .
터미널을 열고 검색하려는 폴더( cd
)로 이동하면 다음은 지난 한 시간 동안 생성된 해당 디렉터리의 모든 파일을 찾습니다.
find . -type f -newerct '1 hour ago'
로 바꾸면 지난 한 시간 동안 수정된 모든 파일이 표시됩니다 -newerct
.-newermt
입력하면서 man find
멋진 옵션이 많이 포함된 find 에 대해 자세히 알아볼 수 있습니다. 다른 하나는 -not
표현식을 뒤집는 데 사용할 수 있는 플래그입니다.
답변2
이 유틸리티의 표준 구현을 사용하면 date
명확한 표준 현지 시간 형식으로 형식화된 현재 시간의 시작을 다음을 통해 얻을 수 있습니다.
this_hour_start=$(date +%Y-%m-%dT%H:00:00%z)
해당 시간보다 1시간 전의 타임스탬프를 얻으려면 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"
다른 곳에 복사하려면 GNU를 사용하여 위 명령에 cp
추가하세요 .-exec cp -t /elsewhere {} +