Linux Find para excluir arquivos em pastas

Linux Find para excluir arquivos em pastas

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.

informação relacionada