O que faz \; quer dizer em um script? [duplicado]

0

O que significa \; no comando a seguir? Eu também não tenho certeza do que significa {} . O \; é realmente necessário?

find ./ -name file_1 -exec cp {} ./ \;
    
por Kampton Joe 06.08.2014 / 22:36

3 respostas

6

No seu exemplo, \; faz parte do comando find. (veja encontro do homem 1 ). O mesmo é verdade para {} .

Este comando preciso indica:

  • Encontre tudo no diretório atual (o ponto ou, no seu caso, ./ )
  • Onde o nome do arquivo ou diretório é file_1
  • E, em seguida, exec ute o seguinte comando: cp {} ./ em que {} substituirá o arquivo ou diretório encontrado.

O resultado é que todos os arquivos e diretórios chamados file_1 serão copiados para o seu diretório atual. (e eles provavelmente serão substituídos se houver vários arquivos ou diretórios com esse único nome)


Tanto para a explicação geral. Agora os detalhes da coleta:

O comando que será executado para cada item encontrado é: cp full_path_to_item ./
Este é o conteúdo entre o -exec e o ;

No entanto, o ponto e vírgula é um caractere especial no bash. Se não fizermos nada de especial com ela, a casca vai comê-lo. Então, escapamos com uma barra invertida. Isso diz ao shell para deixá-lo sozinho e passá-lo para encontrar.


Note que você precisará fazer isso para todos os caracteres especiais. Por exemplo. você não pode simplesmente usar um asterisco no nome do arquivo (então não encontre. -tipo f -name * .mp3 ....)

    
por 06.08.2014 / 22:41
3

A razão pela qual o ponto e vírgula precisa ser escapado é que ele será interpretado pelo shell em vez de pelo find , se não for escapado. find espera ver isso em sua linha de comando, então a contrabarra diz ao shell para ignorá-lo e passá-lo para find . É essencial que find veja o ponto-e-vírgula ou isso lhe dará um erro.

{} também é interpretado por find . Esse é um espaço reservado que você coloca no comando que deseja executar e, para cada arquivo find localizado, ele substituirá esses dois colchetes pelo nome do arquivo e executará seu comando.

No seu exemplo, se encontrar file_1, o seguinte comando será executado:

cp file_1 ./
    
por 06.08.2014 / 23:02
1

O {} \; não tem muito a ver com shell, mas mais com os argumentos que o comando find espera para um subcomando -exec. O {} é substituído pelo nome do arquivo atual, por exemplo Isso resulta em executar o comando ls -d FILENAME com FILENAME substituído por cada arquivo encontrado. O \; serve como um terminador do argumento -exec. Veja a página de manual de localização, por ex. digite man find em um shell linux, e procure a string -exec lá para encontrar a descrição.

    
por 07.12.2017 / 22:25