Como faço log xargs -0 rm?

2

Eu tenho uma necessidade simples de encontrar e excluir recursivamente arquivos de uma determinada extensão. Então, eu tenho a sintaxe que irá encontrar e remover os arquivos e canalizá-los em xargs -0 rm , mas não consigo criar um log dos arquivos que foram removidos.

O que eu tenho até agora:

find /var/www/html -type f -regex ".*/.*\.(png|jpg)" -print0 |xargs -0 rm
    
por user189395 01.11.2015 / 23:33

2 respostas

1

rm é normalmente silencioso ao excluir arquivos. Se você deseja criar um log mostrando os arquivos removidos, adicione a opção -v . Assim, substitua:

xargs -0 rm

com:

xargs -0 rm -v >log
    
por 02.11.2015 / 00:04
1

Você pode usar o próprio find para excluir arquivos e, ao mesmo tempo, escrever seus nomes na stdout:

find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -delete -print >logfile

Nota: A ordem das opções -delete e -print é importante. A segunda opção só será aplicada se primeiro retornar true, ou seja, se a primeira opção -delete não puder excluir o arquivo, seu nome não será impresso para stdout. Se você colocar -print primeiro, ele colocará o nome do arquivo como stdout, independentemente de -delete poder realmente excluir o arquivo.

Note2 : Eu tive que escapar de parênteses e linha vertical para fazer o regex funcionar por padrão com o find util do meu sistema. Como alternativa, você pode especificar -regextype to posix-egrep , por exemplo. De qualquer forma, vale a pena tentar primeiro o comando find w / o -delete para verificar se ele encontra corretamente os arquivos:

find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -print
    
por 02.11.2015 / 09:13

Tags