UNIX タイムスタンプではなく、ディレクトリ名に基づいて 5 日前のディレクトリを削除したいと考えています。などのようにディレクトリが作成されたtest_2013-05-20-12:23:43
とします。
5 日前、つまり 16 日より前のすべてのディレクトリを削除したいと考えています。
これは可能ですか?
少しトリッキーです。まず、5 日前の unix エポックを調べます。
$ date --date='5 days ago' +%s
1368599762
次に、各ディレクトリ名を解析し、時間部分を抽出し、それを UNIX エポック時間に変換し、その日付より前であるかどうかを比較できます。はいの場合は削除します。
例のようにファイル名が ISO-8601 フォーマットを使用している場合、字句比較を行うのはかなり簡単です。
oldest=`date -d 'today -5 days' '+test_%F-%T'`
find "$log_dir" -name 'test_*' -print \
| while read f; do test "$f" '>=' "$oldest" || rm "$f"; done
(未テスト; ファイル名に改行が含まれていないと仮定)
これは、ISO-8601 で標準化することの大きな付加価値です。:-)
ファイル名の基準が明確でない場合は、これを使用してください
find /path/to/files* -mtime +5 -exec rm {} \;
rm、{}、および \ の間にスペースがあることに注意してください。
説明
最初の引数はファイルへのパスです。上記の例のように、パス、ディレクトリ、またはワイルドカードを指定できます。フルパスを使用することをお勧めします。正しい結果が得られるように、exec rm なしでコマンドを実行してください。2 番目の引数 -mtime は、ファイルの経過日数を指定するために使用されます。+5 を入力すると、5 日以上経過したファイルが検索されます。3 番目の引数 -exec を使用すると、rm などのコマンドを渡すことができます。{} \; 最後に、コマンドを終了する必要があります。
詳細については、このリンクをお読みください