-f
diz rm
para nunca solicitar ( por exemplo. quando encontra arquivos somente leitura) e ignorar arquivos ausentes é solicitado a excluir (em vez de indicar um erro). Ele também não reclamará se não tiver passado nenhum arquivo para remover.
Aqui, dependendo da% de xargs
implementation rm
, o stdin será o canal de find
ou /dev/null
, então sem -f
, find pode acabar lendo a resposta para os prompts do saída de find
!
-print
é a ação padrão para find
nas distribuições Linux e sistemas compatíveis com POSIX , mas pode precisar ser explicitamente especificado em sistemas Unix ou Unix-like muito antigos .
Assim, seu objetivo era provavelmente tornar o comando mais robusto e portátil. Você poderia fazer melhor com algumas variantes de find
(indo além do POSIX):
find /dir/prd/log -mtime +90 -print0 | xargs -0 rm -f
evita problemas com nomes de arquivos contendo caracteres "especiais" (incluindo espaço, nova linha, tabulação, aspas simples, aspas duplas, barra invertida) e, se o seu find
suportar a ação -delete
,
find /dir/prd/log -mtime +90 -delete
evita gerar outros processos para executar a exclusão (e também evita alguns problemas de condição de corrida). (Observe que estou especificando /dir/prd/log
aqui para corresponder ao requisito declarado da primeira frase da sua pergunta, conforme confirmado nos comentários.)
Com POSIX find
, você ainda pode evitar xargs
e análise de nome de arquivo pedindo find
para executar rm
próprio:
find /dir/prd/log -mtime +90 -exec rm -f '{}' +
Além de ser mais portátil e confiável, também evita o problema de rm
de leitura de respostas de find
da saída mencionada acima (também evita executar rm
se nenhum arquivo for encontrado).
Se /dir/prod/log
contiver subdiretórios, você deverá filtrá-los para evitar mensagens de erro, pois rm
não pode excluí-los:
find /dir/prd/log ! -type d -mtime +90 -exec rm -f '{}' +