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
)。nullglob
bash
- 「フル」(空でない)ディレクトリ(
F
)のみを含めます。 - 次の修正タイムスタンプのみが含まれます。厳しく3日以上前( ;ディレクトリの場合、これ
m+3
は数日前に最後のコンテンツがディレクトリに追加または削除されたことを意味します。find
)-mtime +3
4仕事以上)。
すべての一致を一覧表示するには、次を使用します。
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()