1日のうちの1時間ごとにファイルが表示されるフォルダがあります。その後、作成日が1時間前のファイルだけを別のフォルダにコピーしたいと思います。たとえば、現在の日時が午前9時20分で、作成日が午前8時から午前8時59分59秒までのファイルをコピーしたいとします。私はシェル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
find
システムにプリインストールされているGNUユーティリティを使用できます。
端末を開き、検索したいフォルダ(cd
)に移動すると、次は過去1時間に作成されたそのディレクトリ内のすべてのファイルを検索します。
find . -type f -newerct '1 hour ago'
に置き換えると、過去1時間に変更されたすべてのファイルが表示されます-newerct
。-newermt
入力しながら、man find
素晴らしいオプションがたくさん含まれている find の詳細をご覧ください。もう1つは、-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 {} +