1時間前に生成されたファイルを見つける方法は?

1時間前に生成されたファイルを見つける方法は?

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 {} +

関連情報