2016年に作成されたディレクトリとそのサブディレクトリ内のファイルの数を(再帰的に)取得したいと思います。「。txt」など、特定のファイルで終わるファイルのみを気にします。ターミナルでこれを実現するにはどうすればよいですか?
GNU find
:
find /some/dir -type f -name '*.txt' -printf '%CY\n' | grep -Fxc 2016
これにより、ローカルタイムゾーンで2016年にctime
のファイルがカウントされます。 ctime
はファイルの作成時間ではありませんが、標準のUNIXセマンティクスで期待できる最適な近似時間であることに注意してください。
変更時刻を一致させたい場合は、-printf '%TY\n'
の代わりに上記の-printf '%CY\n'
を使用できます。
これは、GNUfind
を必要としないポータブルな方法です。
まず、タイムスタンプを含むファイルを作成します
touch -t 201601010000 /tmp/2016 && touch -t 201701010000 /tmp/2017
次に実行します。
find /some/path -type f -name '*.txt' -newer /tmp/2016 ! -newer /tmp/2017
GNU find
で、ファイルをサポートするシステムおよびファイルシステムで誕生時間:
find . -name '*.txt' -type f -newerBt 2016-01-01 \
! -newerBt 2017-01-01 -printf . | wc -c
技術的には、2016-01-01 00:00:00.000000000ナノ秒で作成されたファイルを除外し、2017年にそのナノ秒で作成されたファイルを含めます(あなたの時計がその精度を持っているとは思わない、またはとにかく重要であるとは思わないが、可能性があるたとえば、00:00:00にcronジョブによって作成されたファイルの1秒未満のタイムスタンプをサポートしないファイルシステムに関する問題)
システムが誕生時刻をサポートしていない場合は、最終変更時刻に戻すことができます(これは、ファイルがインスタンス化された時刻であり、ファイル内のデータがインスタンス化された時刻ではないため、とにかく良いでしょう)。 newerBt
をnewermt
に変更することにより、実際にはほとんど関連性がありません。
BSD find
(ここでそれらの-newerxy
from)、次のように変更できます:
find .//. -name '*.txt' -type f -newerBt 2016-01-01 \
! -newerBt 2017-01-01 | grep -c //