警告: このコマンドは謝ってファイルを消去する恐れがある。ただしどのファイルを消すか確かめる機能は実装してある。
$0 files
全く同じバイトサイズのファイルを検出する。
-mの指定によりMD5ハッシュ値が等しいかも見る。
引数には(通常2個以上の)ファイルを指定するが、ディレクトリが含まれていた場合には、
そのディレクトリの直下のファイルも見る。
ハッシュ値を計算する場合は、実際にはファイルにアクセスするのでアクセス時刻が変わってしまうが
その計算後に、計算前のアクセス時刻に戻すようにしている(OSに依存するかも知れない)。
オプション:
-2 : 同じファイルのバイトサイズで,(-mが指定されたらハッシュ値も考慮して)2番目以降を取り出す。
-b N : 処理対象とする最小のバイトサイズを指定。0バイトファイルを避けるなら1を指定。
-D : 同じファイルサイズで,同じハッシュ値のものについて、2番目以降をファイル除去する。<-- 破壊的, 危険
-f N : 少なくとも何回出現したものだけを取り出すかの指定。初期値は2。
-l 0 : シンボリックリンクのファイルは、対象外にする。
-m : MD5ハッシュ値を算出する。(なお、ファイルのアクセス時刻は変更しない工夫がしてある。)
-n : ドライラン。-D に対して、実際に削除は実行はしない。
-s : 180日以内の日時については、通常分単位。日時情報は秒単位で表示。なお、180日以上前は日付のみ。
-t : 同じファイルサイズなら書換日時の古い順(time)
-v 0 ; 標準エラー出力に出力される2次情報を出力しない。
-~ : ファイルの順序を指定されたものから逆順にする。
利用例 :
$0 -f1 # 現行ディレクトリにおける全てのファイルについての情報を出力する。
$0 -f3 . # 現行ディレクトリで、全く同じバイトサイズが3個以上あるファイルを見つける。
$0 -t # 同じサイズのファイルを新しい順序に並べる。
$0 -t~ # 同じサイズのファイルを古い順序に並べる。 -t -~ と -~t でも同様。
$0 -D -n # 全く同じ内容のファイルについて、1個だけ残して削除。ただし-nによりドライランになる。
注意 :
* 同一内容のファイルを1個だけ残すにしても、シンボリックリンクファイルだけ残して、参照先の元のファイルを消すこともあり得るので、要注意。
* 全く同一内容のファイルを消すにしても、シンボリックリンクファイルについては、参照先のファイルより時間関係が想定と異なる場合があるので、要注意。
開発上のメモ :
* -f N で 「N回以上現れた同じサイズかハッシュ値」に制限しているが、-y N..N のような柔軟な書き方を採用したい。