O script a seguir exclui de forma não recursiva arquivos vazios comuns, sem incluir os com ponto, e então exclui de forma não recursiva diretórios vazios, sem incluir os com ponto, e ignorando a presença de .DS_Store
arquivos (ou seja, se o diretório contiver apenas um .DS_Store
arquivo, esse diretório será excluído mesmo assim).
rm -f -- *(.L0)
setopt extended_glob
has_files_other_than_DS_Store() [[ -n $REPLY/^(#i).ds_store(#qNDY1) ]]
remove_empty_macos_dirs() {
local dir ret=0
for dir do
rm -f -- $dir/.(#i)ds_store(N.) && rmdir -- $dir || ret=$?
done
return $ret
}
remove_empty_macos_dirs *(/^+has_files_other_than_DS_Store)
Alguém poderia mostrar como fazer isso funcionar recursivamente? Ou seja, o primeiro passo é deletar recursivamente todos os arquivos regulares vazios. E então deletar recursivamente os diretórios vazios.
Eu tentaria fazer isso sozinho, mas, para ser honesto, estou com medo de experimentar o rm
comando.
Para fazer isso recursivamente, você precisa fazer isso em profundidade primeiro, de modo que se, por exemplo,
dirA
contiver apenasdirB
, ele próprio vazio, você excluadirB
primeiro para quedirA
então fique vazio e possa ser excluído por sua vez.zsh
globs têm ood
qualificador para ordenaçãod
epth-first :o
Você pode substituir
rm
/rmdir
porprint -r Would rm
/print -r Would rmdir
para testar primeiro, mas isso não terá necessariamente o mesmo efeito, poisprint
não excluirá nenhum arquivo e, portanto, não poderá renderizar diretórios vazios.