unix

UNIX

UNIX|findコマンドで、ファイルの日付を比較して抽出する方法

2015/01/11

あるディレクトリに大量のファイルが有り、それを期間を条件として抽出したい場合の findコマンドの使い方です。

findコマンドで期間指定する

findコマンド

文法

find . ! -newer [比較用ファイル名] -print

実例1 (普通の一覧表示)

2010010413010910.jpg が、比較用のファイル。作成年月日が 2010.01.04 とします。

「-newer」オプションの否定形(「!」)という形で条件を作成しており、比較ファイルより古いものが抽出・表示されます。
もちろん否定をなくせば、新しいものが表示されます。

なお、「.」はカレントディレクトリの意味です。

同じようにし、より詳細情報を表示したい場合は、以下のようにします。

実例2 (詳細表示)

2つのファイルを使い、期間で指定したい場合

findで期間指定

2ファイルを使い、期間を条件にしたい場合は以下のようにします。

文法

[条件] 2010年最後(ファイルA)より古く、2010年最初(ファイルB)より新しいもの

実例

前半を否定形、後半を肯定形とし「-and」で条件を繋げる形で記述できます。

検索されたファイルをまとめてコピーする

まとめてコピー

先ほどの条件で [bk_2010]ディレクトリ以下にファイルをコピー(cp)したい場合は以下のようにすれば可能です。

-exec で、実行したいコマンド(cp)をつなげます。
cpの -p は、タイムスタンプなどの属性をそのままにコピーするオプションです。

まとめて移動

同様に[bk_2010]ディレクトリへ移動(mv)させたい場合は以下のようにします。

まとめて削除

削除(rm)の場合は以下のように。
-f は同名ファイルを警告せずに削除するオプションです。

findはなかなか使い勝手のあるコマンドですね。

-UNIX
-, , , , , ,