2016年に作成されたディレクトリとそのサブディレクトリのファイル数を(再帰的に)インポートしたいと思います。 「.txt」など、特定のファイルで終わるファイルにのみ興味があります。ターミナルでどのようにこれを達成できますか?
答え1
GNUの使用find
:
find /some/dir -type f -name '*.txt' -printf '%CY\n' | grep -Fxc 2016
ctime
これにより、現地時間帯に基づいて2016年のファイルが計算されます。これは、ctime
ファイル作成時間ではなく、標準のUNIXセマンティクスを使用して期待できる最高の近似です。
修正時間を一致させるには、-printf '%TY\n'
上記の方法を代わりに使用できます-printf '%CY\n'
。
答え2
これは移植可能な方法なのでGNUfind
。
まず、タイムスタンプ付きのファイルを作成します。
touch -t 201601010000 /tmp/2016 && touch -t 201701010000 /tmp/2017
次に実行します。
find /some/path -type f -name '*.txt' -newer /tmp/2016 ! -newer /tmp/2017
答え3
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
)を使用すると、次のように変更できます。
find .//. -name '*.txt' -type f -newerBt 2016-01-01 \
! -newerBt 2017-01-01 | grep -c //