3日以上の空でないフォルダの検索と削除

3日以上の空でないフォルダの検索と削除

3日以上の空でないディレクトリを見つけて削除したいと思います。

find . <Path> -mtime +3 -exec rm -rf "{}" \;

ファイルのあるディレクトリを削除したいと思います。ディレクトリとファイルの両方が3日以上経過しました。

/tmp
drwxr-x--- 2 root root 4096 Nov  6 05:05 20191106
drwxr-x--- 2 root root 4096 Nov  7 05:05 20191107
drwxr-x--- 2 root root 4096 Nov  8 05:05 20191108
drwxr-x--- 2 root root 4096 Nov  9 05:05 20191109
drwxr-x--- 2 root root 4096 Nov 10 05:05 20191110
drwxr-x--- 2 root root 4096 Nov 11 05:05 20191111
drwxr-x--- 2 root root 4096 Nov 12 05:05 20191112
drwxr-x--- 2 root root 4096 Nov 13 05:05 20191113
drwxr-x--- 2 root root 4096 Nov 14 05:05 20191114
drwxr-x--- 2 root root 4096 Nov 15 05:05 20191115
drwxr-x--- 2 root root 4096 Nov 16 05:05 20191116
drwxr-x--- 2 root root 4096 Nov 17 05:05 20191117
drwxr-x--- 2 root root 4096 Nov 18 05:05 20191118
drwxr-x--- 2 root root 4096 Nov 19 05:05 20191119

だからここにいる時間は3日以上です。各ディレクトリにはいくつかのテキストファイルがあります。

答え1

次のように見えます。

find . -mindepth 1 -maxdepth 1 -not -empty -type d -mtime +3 -exec rm -rf {} \;

touchこのソリューションは、3日以上編集されていない空ではないレベル1ディレクトリを削除します。

テストする前にデータをバックアップしてください。

答え2

シェル内のzsh修正タイムスタンプが3日より古い空でないディレクトリは、ファイル名のワイルドカードパターンと一致します。/tmp

/tmp/*(/DNFm+3)

glob修飾子は次のことを(/DNFm+3)意味します。

  • ディレクトリのみが一致します(;修飾子が同じであることを意味するため、/これは厳密には必要ありません)。F
  • 隠された名前の一致を許可します(D;dotglobのシェルオプションに似ていますbash)。
  • 一致するものがなければ、何も拡張しません(;のシェルオプションに似ていますN)。nullglobbash
  • 「フル」(空でない)ディレクトリ(F)のみを含めます。
  • 次の修正タイムスタンプのみが含まれます。厳しく3日以上前( ;ディレクトリの場合、これm+3は数日前に最後のコンテンツがディレクトリに追加または削除されたことを意味します。find-mtime +34仕事以上)。

すべての一致を一覧表示するには、次を使用します。

print -rC1 -- /tmp/*(/DNFm+3)

削除するには、次を使用します。

rm -rf -- /tmp/*(/DNFm+3)

そのような一致が数千件あり、次のような項目が発生した場合パラメータリストが長すぎます。エラーが発生した場合は、ループを使用してください。

for dirpath in /tmp/*(/DNFm+3); do
    rm -rf -- $dirpath
done

または以下を使用してくださいzargs

autoload zargs
zargs -- /tmp/*(/DNFm+3) -- rm -rf

または、rm組み込み機能を有効にしてシステムコールの制限をzmodload zsh/files解決してください。execve()

関連情報