![Como faço para registrar xargs -0 rm?](https://rvso.com/image/76409/Como%20fa%C3%A7o%20para%20registrar%20xargs%20-0%20rm%3F.png)
Tenho uma necessidade simples de localizar e excluir recursivamente arquivos de uma determinada extensão. Portanto, tenho uma sintaxe que encontrará e removerá os arquivos e os canalizará xargs -0 rm
, mas não consigo criar um log dos arquivos que foram removidos.
O que tenho até agora:
find /var/www/html -type f -regex ".*/.*\.(png|jpg)" -print0 |xargs -0 rm
Responder1
rm
normalmente fica silencioso ao excluir arquivos. Se você deseja criar um log mostrando os arquivos removidos, adicione a -v
opção. Assim, substitua:
xargs -0 rm
com:
xargs -0 rm -v >log
Responder2
Você pode usá find
-lo para excluir arquivos e, ao mesmo tempo, escrever seus nomes no stdout:
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -delete -print >logfile
Observação:A ordem -delete
e -print
as opções são importantes. A segunda opção só será aplicada se a primeira retornar verdadeiro, ou seja, se a primeira -delete
opção não puder excluir o arquivo, seu nome não será impresso no stdout. Se você colocar -print
primeiro, ele colocará o nome do arquivo em stdout, independentemente de -delete
realmente poder excluir o arquivo.
Nota 2: tive que escapar dos colchetes e da linha vertical para fazer o regex funcionar por padrão com find
o utilitário do meu sistema. Alternativamente, você pode especificar -regextype
to posix-egrep
, por exemplo. De qualquer forma, vale a pena tentar primeiro find
o comando sem -delete
opção para verificar se ele encontra os arquivos corretamente:
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -print