Em um sistema GNU, você pode fazer:
find /home/ -mtime +10 -type f -size +100M -delete -printf '%hfiles=(/home/**/*(D.LM+100m+10od))
rm -f $files
rmdir ${(u)files:h}
' |
awk -v RS=' find /home/ \( -mtime +10 -type f -size +100M -o -type d -empty \) -delete
' '!seen[$0]++ {out = out $0 RS}
END {printf "%s", out}' |
xargs -r0 rmdir
Usamos awk
para filtrar duplicados enquanto mantemos o pedido (sai antes do ramo em que estão) e também atrasamos a impressão até que todos os arquivos tenham sido removidos, portanto rmdir
pode remover diretórios vazios.
com zsh
:
find /home/ -mtime +10 -type f -size +100M -delete -printf '%hfiles=(/home/**/*(D.LM+100m+10od))
rm -f $files
rmdir ${(u)files:h}
' |
awk -v RS=' find /home/ \( -mtime +10 -type f -size +100M -o -type d -empty \) -delete
' '!seen[$0]++ {out = out $0 RS}
END {printf "%s", out}' |
xargs -r0 rmdir
Note que estes removeriam os diretórios que ficam vazios após arquivos serem removidos deles, mas não o pai daqueles diretórios se eles não tiverem nenhum desses arquivos para deletar e ficarem vazios como um resultado dos diretórios sendo removidos. Se você quiser removê-los também, com GNU rmdir
, você pode adicionar a opção -p
/ --parents
a rmdir
.
Se você quisesse remover todos os diretórios vazios, independentemente de arquivos ou diretórios terem sido removidos deles ou não, ainda com o GNU find
, você poderia fazer: