2日間(つまり、今日と昨日)の間にディレクトリ内のファイルを見つける

2日間(つまり、今日と昨日)の間にディレクトリ内のファイルを見つける

Linuxで今日と昨日のフォルダからファイルを見つけるには、コマンドまたはシェルスクリプトが必要です。

はい

今日のコマンドを実行すると、今日と昨日生成されたファイルのリストを提供する必要があります。

次のコマンドを試しましたが、期待した結果が得られませんでした。

find . -type f -mtime +2 -prune -o -mtime +1 -exec ls -ltr {} \;

今日の文書を1つだけ提供し、昨日とその文書のいくつかを提供します。

ベストアンサー1

GNUの使用find:

find . -daystart -type f -mtime -2 -mtime +-1 -ls

昨日の00:00:00から今日の23:59:59.999999999の間に最後に変更されたファイルを提供いたします。今日から24時間単位の数を計算しているため、夏時間(冬/夏時間のある時間帯)の切り替え、夏時間の前後の夏時間の切り替えに誤った結果が生じる可能性があります。時間を節約すると、1日は23時間または25時間になります。

次のようにすることもできます(継続GNUを使用find)。

find . -type f -newermt yesterday ! -newermt tomorrow -ls

ただし、これを行うと、昨日、その時点で変更されたファイルではなく、明日正確に00:00:00.000000000に変更されたファイルが表示されます。ファイルの最後の修正時間がナノ秒以内である可能性は非常に低いですが、変更時間がランダムにtouch設定されたファイル、または1秒未満の時間単位を持たないファイルシステムのファイルで発生する可能性があります。

そしてzsh

autoload age # best in ~/.zshrc
ls -lrtd -- *(D.e:'age yesterday tomorrow':)

または再帰的に使用してくださいfind

ls -lrtd -- **/*(D.e:'age yesterday tomorrow':)

(境界については上記とfind -newermt同じです。)


正しい結果が得られない理由は次のとおりです。

find . -type f -mtime +2 -prune -o -mtime +1 -exec ls -ltr {} \;

まず-a(省略した場合は暗示されます)が前にあるので、上記-oは実際には次のようになります。

find . \( -type f -a -mtime +2 -a -prune \) -o \
  \( -mtime +1 -a -exec ls -ltr {} \; \)

したがって、-type f最初のグループでのみ機能します。

-mtime +2年齢が2より大きい翌日(24時間)に丸められるファイルを選択します。つまり、ファイルは現在の日付と比較して48時間前に最後に変更され、-mtime +1ファイルは24時間前に最後に変更されました。

年齢を一日の始まりと比較する必要があります(したがって(GNU固有)-daystart)。

また、ファイルごとに1つずつ実行される-exec ls -lrt {} \;ため、ソートするファイルは1つだけなので、ファイルのソートオプションは役に立ちません。代わりに使用することもできますが、ファイルのリストが大きい場合は複数回呼び出すことができます。ls-rtls-exec ls -lrt {} +ls

おすすめ記事