特定のタイムスタンプを持つテキストファイルに保存されているファイル名のリスト

特定のタイムスタンプを持つテキストファイルに保存されているファイル名のリスト

私は次のテキストファイルに複数のファイル名を保存しました。new1.txtマイホームディレクトリで、ループを使用してファイルが存在するディレクトリ内のすべてのファイルを一覧表示します。これを実行するコマンドを作成できます。 while read in; do ls -lrt /newusr/home/logs/"$in"; done < new1.txt

これらのログは昨日生成されたものですが、昨日午後2時以降に生成されたファイルをすべて参照したいので、grepステートメントを挿入してみましたが、間違って書いたようです
while read in; do ls -lrt /prdusr/rhd/prdoper/opLogDir/"$in"; done < new1.txt | grep "Dec 18 {14-23}"。構文に問題があるか、それを達成する他の方法はありますか?

ベストアンサー1

まず、正しいタイムスタンプを使用して参照タイムスタンプファイルを作成しますmtime

touch -d 2019-12-18T14:00 timestamp

次に、ファイルを解析し、各ファイルについて、ファイルが作成したばかりのファイルtimestampより最新であるかどうかをテストします。

while IFS= read -r name; do
    if [[ /prdusr/rhd/prdoper/opLogDir/$name -nt timestamp ]]; then
        printf 'Updated: %s\n' "/prdusr/rhd/prdoper/opLogDir/$name"
    fi
done <new1.txt

これは-ntファイルテストを使用してbash修正タイムスタンプを確認します(bashこのテストは1秒未満の精度では実行されません)。

POSIXツールの使用:

touch -d 2019-12-18T14:00 timestamp

while IFS= read -r name; do
    if [ -n "$( find "/prdusr/rhd/prdoper/opLogDir/$name" -newer timestamp )" ]
    then
        printf 'Updated: %s\n' "/prdusr/rhd/prdoper/opLogDir/$name"
    fi
done <new1.txt

これは反対の方法でテストしますfind。ファイルがファイルの後に変更された場合、見つかったパスが出力され、timestampシェルは出力を空でない文字列として検出して呼び出しますprintf

おすすめ記事