Como encontrar o comando -execdir + work?

1

Compreendo que find -tests -execdir <command> '{}' ';' corre command para cada ficheiro correspondente ao (s) teste (s) especificado (s). O comando, ao usar -execdir , é executado no mesmo diretório pai que o arquivo correspondente (para cada arquivo correspondente), pois {} representa o nome base do arquivo correspondente.

Agora, a pergunta é: como isso é feito ao trabalhar com vários arquivos de uma só vez usando + em vez de ';' ? Se eu usar find -tests -execdir <command> '{}' + , todos os arquivos serão fornecidos como argumentos para o comando especificado (de maneira que não exceda o máximo de argumentos). Como encontrar <command> em todos eles de uma só vez?

    
por joker 17.10.2018 / 23:14

1 resposta

1

Digamos que seu find localize os seguintes arquivos:

./foo/bar
./foo/baz
./foo/quux

Se você usar -execdir [...]+ , o comando efetivo resultante será:

( cd ./foo; command bar baz quux )

Ao contrário de (efetivamente) isso, se você usa -execdir [...] \; :

( cd ./foo; command bar )
( cd ./foo; command baz )
( cd ./foo; command quux )

O mesmo é verdadeiro para -exec em vez de execdir , mas especificará o caminho em vez de alterar o diretório de trabalho. Se você usar -exec [...]+ , o comando efetivo resultante será:

command ./foo/bar ./foo/baz ./foo/quux

Ao contrário de (efetivamente) isso, se você usa -exec [...] \; :

command ./foo/bar
command ./foo/baz
command ./foo/quux

Vamos ver como isso se comporta com arquivos encontrados em dois diretórios:

$ tree
.
├── bar
│   ├── bletch
│   └── freeble
└── foo
    ├── bar
    ├── baz
    └── quux
$ find . -type f -exec echo {} \;
./foo/baz
./foo/quux
./foo/bar
./bar/bletch
./bar/freeble
$ find . -type f -execdir echo {} \;
./baz
./quux
./bar
./bletch
./freeble
$ find . -type f -exec echo {} +
./foo/baz ./foo/quux ./foo/bar ./bar/bletch ./bar/freeble
$ find . -type f -execdir echo {} +
./baz ./quux ./bar
./bletch ./freeble
    
por 17.10.2018 / 23:27