o objetivo é encontrar diretórios com determinado nome e excluir todos os arquivos dentro deles, mantendo os diretórios reais
find /home/www/sites/ -iname '_cache' -exec du -hs {} \;
isso me dá uma lista de arquivos com seus tamanhos
204K /home/www/sites/test.site.com/html/development/Temporary/_cache
904K /home/www/sites/test.site2.com/html/development/Temporary/_cache
é possível conseguir com o comando find do Linux?
Responder1
Tentei algo e parece que está funcionando, é uma solução semelhante que Alex postou aqui.
find . -iname '_cache' | xargs -I {} find {} -type f -maxdepth 1 -exec rm {} \;
Ele deve excluir apenas os arquivos encontrados no diretório _cache e somente neste diretório. Ele não excluirá nenhum arquivo dos subdiretórios do diretório _cache.
Claro, experimente antes de usar e em vez de rm, coloque ls ou algo inofensivo.
Responder2
Não testei completamente essa lógica... mas você poderia fazer algo dentro de um loop como:
for findname in $(find /path/to/search -name '_pattern')
do
find $findname -type f
done
Assim, você obtém a lista de arquivos que correspondem ao seu padrão de pesquisa e, em seguida, percorre cada um deles com uma nova pesquisa em busca de arquivos para excluir.
A maneira como está escrita fornecerá uma lista de arquivos, para que você possa redirecioná-la para um arquivo e, em seguida, percorrê-la com um rm. Você também pode anexar um exec ao find com o loop for. Eu certamente recomendaria executar primeiro como está escrito para testar a lógica e garantir que as correspondências pareçam boas.
Responder3
Comando correto para apagá-lo
find . -iname '_cache' | xargs -I {} find {} -type f -maxdepth 1 -delete
Responder4
find tem uma opção -delete. Isso excluirá todas as correspondências.
Da página de manual
-excluir
Delete files; true if removal succeeded. If the removal failed, an error message is issued. If -delete fails, find's exit stat- us will be nonzero (when it eventually exits). Use of -delete automatically turns on the -depth option. Warnings: Don't forget that the find command line is evaluated as an expression, so putting -delete first will make find try to delete everything below the starting points you specified. When testing a find command line that you later intend to use with -delete, you should explicitly specify -depth in order to avoid later surprises. Because -delete implies -depth, you cannot usefully use -prune and -delete together.