Suporte generalizado para encontrar com “-exec… +”? [fechadas]

1

A julgar pelo registro de mudanças do GNU findutils ele tinha que ser encontrado no GNU para pelo menos uma década (também mais do que isso fazia parte do POSIX), então pode-se presumir que ele seja suportado em todos os lugares agora?

Além disso, existem boas razões para defender xargs nos casos em que -exec … + poderia ser usado? (Obviamente, você usaria xargs se precisar de alguns desses parâmetros especiais, como, por exemplo, aqueles para controlar o número máximo de argumentos, paralelismo, ...)

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

[find with -exec … +] can be less efficient than some uses of xargs; for example xargs allows new command lines to be built up while the previous command is still executing, and allows you to specify a number of commands to run in parallel. However, the find ... -exec ... + construct has the advantage of wide portability. GNU findutils did not support ‘-exec ... +’ until version 4.2.12 [January 2005]; one of the reasons for this is that it already had the ‘-print0’ action in any case.

    
por phk 31.10.2016 / 22:41

2 respostas

3

A variante + de -exec foi introduzida no POSIX após PASC Interpretation 1003.2 # 210 em 2001, e se fundiu com o padrão POSIX na edição 6 (conforme documentado no padrão atual find(1) documentação ). De acordo com a Interpretação, todos os derivativos do System V Release 4 o suportam, assim como o HP-UX (em 2001 - eu sei que o HP-UX 10 não suportou); obviamente, qualquer sistema em conformidade com o POSIX 6 ou 7 também o suporta.

O GNU-ism é realmente o conjunto de comandos find -print0 | xargs -0 . Se -exec ... + estiver disponível e o -0 suportado em xargs não for, definitivamente será melhor usar o primeiro; mesmo com -0 , embora não haja nenhuma razão para não usar -exec ... + se ele suportar o que você precisa.

    
por 31.10.2016 / 23:49
1

Can [-exec ...] be safely assumed to be supported everywhere now?

O -exec ... '{}' ';' variant, que fornece exatamente um jogo por comando executado, é definitivamente esperado para ser suportado em todos os lugares agora, mesmo em sistemas unix não-POSIX.

A variante -exec ... '{}' + , não tenho certeza. Verdade, ele é definido em POSIX-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.

Are there any good reasons to advocate for xargs instead in cases where [-exec ... '{}' +] could be used?

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

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

(Na prática, isso requer que os nomes de arquivos e diretórios não contenham novas linhas incorporadas neles. Bash e GNU find, sed, awk e xargs suportam nul caractere %code% como um separador, para que eles possam manipular todos os nomes de arquivos possíveis sem problemas.)

    
por 31.10.2016 / 23:49