-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 '{}' +