UNIX

UNIX

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

2018/03/17

あるディレクトリに画像(などの)ファイルが多数存在する場合に「期間」を条件として対象ファイルを抽出したいと思いました。その場合の findコマンドの使い方です。

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

findの使い方

文法

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

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

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

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

実例2 (詳細表示)

同じようにし、より詳細情報を表示したい場合は -exec オプションと ls -l オプションを繋げて以下のようにします。

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

findで期間指定

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

文法

実例

【条件】
「2010年最後(ファイルA)より古い」 かつ 「2010年最初(ファイルB)より新しいもの」

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

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

まとめてコピー

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

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

まとめて移動

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

まとめて削除

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

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

-UNIX
-, , , , ,