Como encontrar arquivos dinamicamente e copiá-los para um diretório no linux

0

Tentando encontrar esses arquivos e copiá-los para um diretório (test_dir);

abc-1.0.zip
kncb-1.0.zip
jenk-1.1.zip

Eu gostaria de encontrar todos esses arquivos dinamicamente e copiá-los para um diretório. Eu tentei o comando abaixo, mas ele só copia o último arquivo (jenk * .zip), precisa de um comando que copie todos os arquivos acima para um diretório mencionado (test_dir);

find / -type f -name "*abc*.zip" -o -name "*kncb*.zip" -o -name "*jenk*.zip" ! -path '*/test_dir/*.jar' -exec cp -ar {} ./test_dir \;
    
por itgeek 25.09.2018 / 03:40

1 resposta

2

Você precisa aplicar ( ) em sua construção OR.

Uma explicação pode ser encontrada na página man:

Please note that -a, when specified implicitly (for example by two tests appearing without an explicit operator between them) or explicitly, has higher precedence than -o. This means that find . -name afile -o -name bfile -print will never print afile.

Exemplo:

touch afile bfile

Sem ( ) :

find . -name afile -o -name bfile -print
./bfile

que tem um implícito -a entre -name bfile e -print :

find . -name afile -o -name bfile -a -print
./bfile

Com ( ) , o resultado é o esperado:

find . \( -name afile -o -name bfile \) -print
./afile
./bfile 

Seu -a implícito está entre -o -name "*jenk*.zip" e ! -path '*/test_dir/*.jar' .

    
por 25.09.2018 / 06:59

Tags