ディレクトリから古いファイルを削除しますが、ルートディレクトリは削除しません

ディレクトリから古いファイルを削除しますが、ルートディレクトリは削除しません

現在、毎時間表示されているパスのすべてのファイルとディレクトリを削除するようにcrontabを設定しています。

私の現在の解決策は2行なので、誰かがこれを1行に置き換える方法を教えてくれることを願っています。現在の2番目のコマンドcompleteもディレクトリを削除します。completeディレクトリを維持して削除したいですcomplete

私は何が間違っていましたか?後ろにスラッシュがあってはいけませんかcomplete/*

60分より古いディレクトリのファイルを削除するには、次の手順に従ってください。

0 */1 * * * find /root/Downloads/complete/ -type f -mmin +60 -delete

60分より古いディレクトリを削除するには、次の手順に従ってください。

0 */1 * * * find /root/Downloads/complete/ -type d -mmin +60 -exec rm -r "{}" \;

答え1

おそらくあなたは

0 */1 * * * find /root/Downloads/complete/* -type d -mmin +60 -exec rm -r "{}" \;

例では、findディレクトリ名(およびその下のすべてのエントリ)が一致しますが、ワイルドカードを使用すると、シェルはディレクトリ名をディレクトリの下のすべてのエントリ(ロール呼び出しを除く)に拡張します。

答え2

この行を使用してください。

 0 */1 * * * find /root/Downloads/complete/ \( -type f -o -type d \) -mmin +60 -delete

/root/Downloads/complete/1時間前から変更されたパスの下のファイルとディレクトリのみが削除されます。

答え3

find /root/Downloads/complete/ -type d -mmin +60 -exec rm -r "{}" \;

ディレクトリまたはサブディレクトリのファイルが最近変更されても、ディレクトリ自体が1時間以内に変更されていない場合、ディレクトリとその内容はすべて削除されます。これはあなたが望むものではないかもしれません。

ディレクトリの変更時間はあまり役に立ちません。古いファイルを削除してから空のディレクトリを削除することをお勧めします。ルートディレクトリの削除を防ぐには-mindepth 1

cd /root/Downloads/complete && find . -type f -mmin +60 -delete && find . -depth -mindepth 1 -type d -empty -delete

これは損傷を引き起こす可能性があります。たとえば、作成したばかりで、他のプログラムで使用されているディレクトリを削除できます。タイムアウトに応じてコンテンツを削除するのは良い考えではありません。何かを削除する必要がある場合は、ランダムに遅延した後ではなく、ファイルが正常に処理された後に削除する必要があります。

関連情報