一般化する

一般化する

/homeディレクトリで100 MBを超えるファイルを見つけ、10日を超えると削除する検索スクリプトがあります。 cron ジョブで毎日スケジュールされます。

find /home/ -mtime +10 -type f -size +100M -delete >/dev/null 2>&1

このスクリプトを使用すると空のディレクトリが残るので、ファイルが削除されたディレクトリを繰り返し削除したいと思います。

誰でもこのスクリプトにどのような変更が必要かを提案または提案できますか?

ベストアンサー1

GNUシステムでは、次のことができます。

find /home/ -mtime +10 -type f -size +100M -delete -printf '%h\0' |
  awk -v RS='\0' '!seen[$0]++ {out = out $0 RS}
                  END {printf "%s", out}' |
  xargs -r0 rmdir

awk順序を維持しながら重複ファイルをフィルタリングし(そのファイルがある分岐の前に残す)、空のディレクトリを削除できるようrmdirに、すべてのファイルが削除されるまで印刷を遅らせました。

そしてzsh

files=(/home/**/*(D.LM+100m+10od))
rm -f $files
rmdir ${(u)files:h}

これにより、ディレクトリが削除され、空になります。文書ただし、このディレクトリの親ディレクトリには削除するファイルがなく、次のために空の場合は削除されません。目次削除されました。これらも削除するには、GNUを使用rmdirして。-p--parentsrmdir

ファイルまたはディレクトリが削除されたかどうかにかかわらず、GNUを使用して空のディレクトリをすべて削除するには、find次の手順を実行できます。

 find /home/ \( -mtime +10 -type f -size +100M -o -type d -empty \) -delete

おすすめ記事