Suporte generalizado para localizar com "-exec… +"?

Suporte generalizado para localizar com "-exec… +"?

A julgar poro log de alterações do GNU findutilsele deveria estar na descoberta do GNU por pelo menos uma década (também mais do que fazia parte do POSIX), então pode-se presumir com segurança que ele é suportado em todos os lugares agora?

Além disso, há boas razões para defendê-lo xargsnos casos em que -exec … +poderia ser usado? (Obviamente, você usaria xargsse precisasse de alguns desses parâmetros especiais, como, por exemplo, aqueles para controlar o número máximo de argumentos, paralelismo,…)

Uma citação interessante deuma parte da documentação do GNU findutil:

[encontrar com -exec … +]pode ser menos eficiente do que alguns usos de xargs; por exemplo, xargspermite que novas linhas de comando sejam criadas enquanto o comando anterior ainda está em execução e permite especificar vários comandos para serem executados em paralelo. No entanto, a find ... -exec ... +construção tem a vantagem de ampla portabilidade. GNU findutils não suportava ' -exec ... +' até a versão 4.2.12[Janeiro de 2005]; uma das razões para isso é que já tinha a -print0ação '' em qualquer caso.

Responder1

A +variante de -execfoi introduzida no POSIX seguindoInterpretação PASC 1003.2 #210em 2001, e fundido com o padrão POSIX na edição 6 (conforme documentado no padrão atualfind(1)documentação). De acordo com a Interpretação, todos os derivados do System V Release 4 o suportam, assim como o HP-UX (em 2001 - eu sei que o HP-UX 10 não o suporta); obviamente, qualquer sistema compatível com POSIX issue 6 ou 7 também o suporta.

O GNU-ismo é na verdade o find -print0 | xargs -0conjunto de comandos. Se -exec ... +estiver disponível e o -0suporte xargsnão estiver, é definitivamente melhor usar o primeiro; mesmo -0que não haja razão para não usar, -exec ... +se ele suportar o que você precisa.

Responder2

Pode-se presumir com segurança que [ -exec ...] é suportado em todos os lugares agora?

A -exec ... '{}' ';'variante, que fornece exatamente uma correspondência por comando executado, espera-se definitivamente que seja suportada em todos os lugares agora, mesmo em sistemas unix não POSIX.

A -exec ... '{}' +variante, não tenho certeza. É verdade que está definido emPOSIX-1, então definitivamente é suportado em todos os sistemas POSIXy atuais. No entanto, não tenho certeza se todos os sistemas Unix mais antigos (ainda em uso) o suportam.

Existem boas razões para defender xargs nos casos em que [ -exec ... '{}' +] poderia ser usado?

Não, na verdade não. Por que usar dois comandos quando um seria suficiente?

A questão é que se a única ferramenta que você conhece é um martelo, todos os problemas parecem pregos. O poder de xargsvem do fato de que você pode manipular a lista de correspondências usando bash, sed, awke assim por diante, antes de executar o(s) comando(s) que atuam na lista.

(Na prática, isso requer que os nomes de arquivos e diretórios não tenham novas linhas incorporadas. Bash e GNU find, sed, awk e xargs suportam caracteres nulos \0como separadores, para que possam manipular todos os nomes de arquivos possíveis sem problemas.)

informação relacionada