-2

UNIX タイムスタンプではなく、ディレクトリ名に基づいて 5 日前のディレクトリを削除したいと考えています。などのようにディレクトリが作成されたtest_2013-05-20-12:23:43とします。

5 日前、つまり 16 日より前のすべてのディレクトリを削除したいと考えています。

これは可能ですか?

4

3 に答える 3

0

少しトリッキーです。まず、5 日前の unix エポックを調べます。

$ date --date='5 days ago' +%s
1368599762

次に、各ディレクトリ名を解析し、時間部分を抽出し、それを UNIX エポック時間に変換し、その日付より前であるかどうかを比較できます。はいの場合は削除します。

于 2013-05-21T06:35:00.937 に答える
0

例のようにファイル名が 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 で標準化することの大きな付加価値です。:-)

于 2015-06-08T16:25:04.620 に答える
0

ファイル名の基準が明確でない場合は、これを使用してください

find /path/to/files* -mtime +5 -exec rm {} \;

rm、{}、および \ の間にスペースがあることに注意してください。

説明

最初の引数はファイルへのパスです。上記の例のように、パス、ディレクトリ、またはワイルドカードを指定できます。フルパスを使用することをお勧めします。正しい結果が得られるように、exec rm なしでコマンドを実行してください。2 番目の引数 -mtime は、ファイルの経過日数を指定するために使用されます。+5 を入力すると、5 日以上経過したファイルが検索されます。3 番目の引数 -exec を使用すると、rm などのコマンドを渡すことができます。{} \; 最後に、コマンドを終了する必要があります。

詳細については、このリンクをお読みください

于 2013-05-21T06:25:16.863 に答える