Qual é o significado de “\;” no comando “find”? [duplicado]

1
    

Esta pergunta já tem uma resposta aqui:

    

Qual é o significado do comando \; in find ? Qual é o motivo para usá-lo?

No manual, posso encontrar um exemplo:

find . -type f -exec file '{}' \;

Por que não: find . -type f -exec file '{}' ?

    
por rSnxe 22.04.2018 / 17:03

1 resposta

2

O comando find tem que ter uma maneira de dizer onde o comando que deve ser executado através de -exec termina. Sem o ; no final do comando, find não saberia onde o comando terminava e onde (possivelmente) outros find sinalizadores continuavam.

Um exemplo absurdo que executa basename em todos os arquivos e ls em todos os diretórios:

find . '(' -type f -exec basename {} ';' ')' -o '(' -type d -exec ls {} ';' ')'

Sem o ; acima, find não saberia se deve executar basename /some/path ou basename /some/path ')' -o '(' ... etc.

Citar ou escapar do ; é feito apenas para que o shell não o trate como um delimitador de comando.

Um exemplo menos sem sentido que primeiro copia .txt arquivos para um diretório específico e renomeia os arquivos originais adicionando .done ao nome deles (se a cópia foi aprovada):

find . -type f -name '*.txt'
    -exec cp {} /some/path/dest ';' \
    -exec mv {} {}.done ';'

(Note, como Eliah Kagan aponta em comentários, que a construção {}.done é estritamente falando não portável, mas implementação definida . Uma implementação pode escolher não expandir os caracteres {} para Na minha experiência, todas as find implementações do expandem {} para o nome do caminho atual mesmo quando concatenadas com outra string como essa.)

Sem o ; no exemplo anterior, find não saberia se queremos executar o comando cp no arquivo encontrado junto com /some/path/dest , um arquivo chamado -exec , mv etc.

    
por 22.04.2018 / 17:13

Tags