/から始めて、変更されたすべてのファイルを繰り返しリストする必要があります。 2020年の書類のみ。 findで複数のコマンドを試しましたが、うまくいきません。
答え1
GNUの実装find
(通常はLinuxをカーネルとして使用する非組み込みオペレーティングシステムに見られる)を使用すると(実際にはBSDユーザー貢献パッチとして最初に導入されたため、構文はGNUに限定されませんが)、次のことができます。
find / -type f -newermt 2020-01-01 ! -newermt 2021-01-01
これには、2021-01-01 00:00:00.000000000に最後に変更されたファイルが含まれ、2020-01-01 00:00:00.000000000に最後に変更されたファイルは含まれません。現実的に正確なナノ秒精度のファイルを作成することはほとんど不可能ですが、これはナノ秒精度で時間を節約しないアーカイブから抽出されたファイル、または長い間タイムスタンプが変調されたファイルの場合です。それでも起こることがありますtouch -d 2020-01-01
。はい。
GNUのもう一つのアプローチfind
は次のとおりです。
find / -type f -printf '%TY%p\0' | LC_ALL=C sed -zn 's/^2020//p' | tr '\0' '\n'
つまり、find
ファイルが最後に変更された年が印刷され、その後にNULで区切られたレコードへのパスが印刷され、これはsed
2020年から始まるレコードをフィルタリングするために使用されます。
find
サポートされていない実装では、-newermt
標準述語を使用して参照ファイルを作成し、標準述語と比較できますtouch
。-newer
mkfifo first last
touch -d 2020-01-01 first
touch -d 2021-01-01 last
find / -type f -newer first ! newer last
(ここでは通常のファイルではなくfifoファイルで作成されるため、選択されません-type f
。)