2016-08-29 4 views
0

GNU findがすべてのコンテンツを含む古いフォルダを削除したいと思います。私は-mtimeに精通していますが、ディレクトリのタイムスタンプは通常rsyncによって壊れています - 重要ではありません。幸いにも、タイムスタンプはyyyy-mm-ddというディレクトリ名にエンコードされています。日付がyyyy-mm-ddとしてdirnameにエンコードされた日付より古いディレクトリを見つける方法

タイムスタンプではなくdirnameを使用して同じことを行うにはどうすればよいですか?最適な読み取り溶液が好ましい。

EDIT: 破損したタイムスタンプ:

drwxr-xr-x 2 user user 8192 Aug 23 11:12 2016-05-03 
drwxr-xr-x 2 user user 8192 Aug 23 11:12 2016-05-04 
drwxr-xr-x 2 user user 8192 Aug 23 11:12 2016-05-05 

のdirs内のファイルは、正しいタイムスタンプを持っています。

  1. アイデア:find -mtimeでファイルを削除してから(第2ラウンド)の空のdirsをパージ。ほとんどの場合、-emptyはファイルにも適用されるため、1回のラウンドで両方を実行することはできません。

  2. アイデア:ディレクトリのタイムスタンプを(名前に応じて)1ラウンドで修正し、別のラウンドでfind -mtimeですべてパージします。しかし、通常のrsyncはこれをもう一度破損します。 cronジョブは競合条件に合わせて調整する必要があります。

  3. アイデア:それは@xvan

での回答で提案されたとして、私は最善の方法を見つける助けを求める、(date -d "-150 days"を使用して)yyyy-mm-dd-mtime +150を変換して、フォルダ名にこの文字列を比較します。あなたは、bashの辞書式を使用することができ

+1

これまでに試したことをお見せください。スタックオーバーフローはコード作成サービスではありませんが、少なくともあなた自身で問題を解決しようとすると、人々はあなたを助けてくれるでしょう。 [最小限で完全で検証可能なサンプルを作成する方法](http://stackoverflow.com/help/mcve)と[どのように良い質問をしますか?](http://stackoverflow.com/help)を参照してください。 /尋ねる方法)。 - 私はフォルダ名を読み、 '$ {name# - } 'を使って日、月、年に分割し、日付を比較します。 –

答えて

3

は比較:

if [[ "2010-01-01" < "2011-02-02" ]] 
    then echo "yes" 
fi 

EDITを:それは<を逃れるために少し難しいですが、これは私のために働きました。

find . ! -path . -type d -exec bash -c "[[ {} < 2010-02-02 ]]" \; -print 
+0

はい、これは正しい方法です。私のnr.3のアイデアと組み合わせて仕事をしています。最後のコマンドは 'find。 ! -path。 -d "-exec bash -c" [[{} <$(日付-d "-30日" +%Y-%m-%d)] ""; -print'。ありがとうございました。 – SkyRaT

関連する問題