Linuxで特定の時間より後に生成されたファイルを列挙する方法

画像解析などをしていると、しばしば、「今の作業で新しくできたファイルは何だろう?」と思うことがあります。

Linuxでは、find コマンドに、-newer というオプションがあります。findのmanページには以下の記載があります。

-newer file
ファイルが file よりも最近に内容を更新されていれば、真を返す。

であるならば、あるファイルを作成して、作業をして、その後に、findをかければ列挙できるはずです。

いろいろ調べた結果、touchコマンドで -t オプションを使うとタイムスタンプを決められるので、それをスクリプトに組み込めるなと思いました。

以下のスクリプトで、新たに生成されたファイルの一覧が generated_from_タイムスタンプ.txt に作成されます。

#!/bin/bash

#generate timestamp
ts=$(date +%Y%m%d%H%M.%S)

#generate a temporary file with current timestamp for find
touch -t $ts /tmp/_timestamp

# BEGIN commands to generate new files
#
# END

# list files which is generated after /tmp/_timestamp
find . -type f -newer /tmp/_timestamp | tee -a generated_from_${ts}.txt

Linuxでfind, sedを使いながら文字列を再利用してファイル名の途中に文字列を挿入する方法

最近、以下のようなことをやる必要がありました。

ファイル名が

201105_ID.jpg
20120608_ID.jpg
20130704_ID.jpg
201409_ID.jpg

となっているファイル(年月が必ずあり、日が時についている)に対して、
年の後にアンダースコアを入れたい、つまり、

2011_05_ID.jpg
2012_0608_ID.jpg
2013_0704_ID.jpg
2014_09_ID.jpg

としたいわけです。

続きを読む