No macOS, há um arquivo oculto .DS_Store
em alguns diretórios (bem, na maioria deles).
O problema com .DS_Store
os arquivos é esse rmdir
e find . -depth 1 -type d -empty -print -delete
não exclua esses diretórios.
Suspeito que não haja uma maneira direta de lidar com isso, como --ignore_ds_store
a opção inexistente de rmdir
, então talvez haja uma solução alternativa. O shell padrão do macOS é zsh
, então talvez a solução alternativa seja possível usando alguns zsh
recursos; então adicionei a tag 'zsh' à pergunta.
.DS_Store
arquivos podem impedir que diretórios sejam excluídos, pois fazem com que os diretórios não fiquem vazios.Editar:
.DS_Store
arquivos e excluí-la.Observe que isso
-delete
implica-depth
(o processo sai entre os ramos em que estão).Isso não está relacionado à extensão do FreeBSD,
-depth n
que retorna true se o arquivo atual que está sendo processado estiver em deepn
.Aqui você está usando
-depth n
onde deveria ter usado-mindepth 1 -maxdepth 1
(inicialmente do GNUfind
) para pararfind
na profundidade 1.Aqui
-depth n
pode ser útil como:O que exclui todos
.DS_store
os arquivos regulares na profundidade 2 e arquivos de diretório vazios na profundidade 1.Porque
-delete
implica-depth
, os.DS_store
arquivos nos diretórios são excluídos antes que seu diretório pai seja verificado quanto a vazio.Isso também tem o efeito colateral potencialmente indesejado de excluir
.DS_store
diretórios que de outra forma não estariam vazios.Com zsh, você poderia fazer:
Mas isso é potencialmente perigoso porque:
rm
, eles serão removidos..DS_Store
(s) arquivo(s), portanto, se for um diretório, ele e todo o seu conteúdo serão removidos.No lugar de
rm -rf
, você poderia usar uma função comoO que seria menos perigoso.