Excluindo arquivos no Linux

3

Eu preciso encontrar todos os arquivos que correspondem a um determinado critério e excluí-los. Aqui está um snippet:

/var/www/somesite/releases/{many directories}/tmp/attachment_fu

Gostaria de encontrar todos os arquivos em qualquer diretório tmp/attachment_fu e excluí-los - o problema é que {many directories} está jogando fora minhas find skills (ou talvez find seja o comando errado - eu também tentou locate sem sucesso).

    
por user18816 18.09.2009 / 08:26

5 respostas

5

Pode estar faltando something but rm /var/www/somesite/releases/*/tmp/attachment_fu/* parece ser o que você quer. ls /var/www/somesite/releases/*/tmp/attachment_fu pode ser usado para ver o que será excluído

    
por 18.09.2009 / 08:37
2

ls / var / www / somesite / releases / * / tmp / attachment_fu | xargs rm -rf

algo assim?

sim, ou rm -rf / var / www / somesite / releases / * / tmp / attachment_fu

;)

    
por 18.09.2009 / 08:42
2

Eu não estou completamente claro sobre o que você está tentando fazer - excluir arquivos correspondentes ao nome attachment_fu recursivamente, mas deixando diretórios sozinho?

Se sim, tente isso (adicionei um eco para que você possa testá-lo primeiro) ...

find /var/www/somesite/releases -type f -name attachment_fu -exec echo rm -f {} \;

Se não, por favor explique mais:)

Alternativamente, você pode usar o sinalizador -regex para descobrir se o '/ tmp /' é importante; algo como ...

find /var/www/somesite/releases -type f -regex '.*/tmp/attachment_fu$' -exec echo rm -f {} \;

Tudo isso está assumindo que os arquivos que você está procurando estão em várias profundidades na árvore do sistema de arquivos, caso contrário você pode simplesmente usar rm (postar por raio).

    
por 18.09.2009 / 08:36
0

Além de outras respostas, você pode incorrer no erro "linha de comando longa" se estiver usando * quando o número de arquivos que você precisa excluir for muito grande.

A maneira mais segura pode ser usar a expansão do shell para recuperar a lista de diretórios, fazer um loop e usar o find para remover os arquivos:

for d in $(ls /var/www/somesite/releases/*/tmp/attachment_fu)
do
  find $d -type f -exec rm {} \;
done

Isso deve funcionar muito bem, é claro que falharia se você tivesse um grande número de diretórios, mas você teria outros problemas: P

    
por 18.09.2009 / 15:26
-2

rm -rf disse o caminho que irá remover todos os dir e arquivos

    
por 18.09.2009 / 13:08

Tags