
私は bash スクリプトの初心者で、Ubuntu の検索方法で行き詰まっています。フォルダー内の/opt/
すべてのフォルダーを検索して、特定の日付より古いかどうかを確認したいと考えています。古い場合は、このフォルダー内のファイル (およびフォルダー自体) を削除する必要があります。日付がまだ新しい場合は、ファイルには触れないでください。
コードにある内容:
find $BACKUP_DIR -maxdepth 1 -mtime +$DAYS_TO_KEEP -name "*$mystring" -exec rm -rf '{}' ';'
変数には次の値が含まれます。
BACKUP_DIR=/opt/
TESTDIR=2014-11-25-daily_testmachine
mystring=-daily_testmachine
変数$DAYS_TO_KEEP
が 2 の場合、日付は 2014-11-25 で、フォルダー名は2014-11-20-daily_testmachine
フォルダーであり、その内容は削除される必要があります。
削除するファイルやフォルダーが削除/見つからないのは、何が間違っているのでしょうか? エラーが見つからないようです。
注記:フォルダーの正確な文字列名を指定してコマンドを実行すると、フォルダーが削除されます。つまり、形式または命名に何か間違いがあるということです。
find $BACKUP_DIR -maxdepth 1 -name "2014-11-20-daily_testmachine" -exec rm -rf '{}' ';'
より明確にするために、セットアップを示すスクリーンショットを作成しました。
答え1
私のエラーは のロジック エラーでした-mtime
。スクリプトは名前をチェックしていると思っていましたが、-mtime
ファイルが作成された日付をチェックしています。そのため、最終的なコードは次のようになります。
DAYS_TO_KEEP=2
find $BACKUP_DIR -maxdepth 1 -mtime +"$DAYS_TO_KEEP" -exec rm -rf {} \;
フォルダを見つけるsudo touch -d "3 days ago" /filepath/folderToRemove
ために-mname
そしてファイルが削除できるほど古いものであることを確認してください。この最終コードは変数より古いすべてのフォルダを削除します$DAYS_TO_KEEP