Script simples do Linux para localizar e combinar artefatos no arquivo txt

0

Eu quase semanalmente preciso verificar nossos artefatos de construção para ter certeza de que tudo é considerado. Este roteiro está abaixo. Não consigo executar este comando.

#!/bin/bash 

cd /mydir/nextlevel/here
find . -name *.rpm > ~/rpm.txt
find . -name *.zip > ~/zip.txt

cd ~/
cat rpm.txt zip.txt > artifacts.txt

rm rpm.txt zip.txt

mv artifacts.txt /newdir/myname
    
por Paul Pearson 06.02.2018 / 18:18

2 respostas

1

A questão principal são as duas linhas

find . -name *.rpm > ~/rpm.txt
find . -name *.zip > ~/zip.txt

... e o modo como *.rpm e *.zip não são citados nessas linhas.

Isso significa que, por exemplo *.rpm expandirá para file1.rpm file2.rpm etc. (todos os nomes que correspondem ao padrão) antes find é invocado mesmo. Isso provavelmente fará com que find reclame sobre "opção desconhecida" (ou similar).

Em vez disso, você gostaria de passar os padrões de nome de arquivo não expandidos:

find . -name '*.rpm' > ~/rpm.txt
find . -name '*.zip' > ~/zip.txt

Isso faria seu script funcionar.

Sugestão:

#!/bin/sh

find /mydir/nextlevel/here -type f \( -name '*.rpm' -o -name '*.zip' \) -print >/newdir/myname

Isso combina todas as operações que o seu script está fazendo em um único comando que localiza os arquivos que têm os sufixos de nome de arquivo específicos e coleta seus nomes no arquivo /newdir/myname .

A única diferença é que o caminho completo (incluindo /mydir/nextlevel/here ) seria incluído na listagem de cada arquivo e que os arquivos podem ser listados em uma ordem diferente.

O script a seguir corrigiria o caminho no arquivo de saída:

#!/bin/sh

cd /mydir/nextlevel/here &&
find . -type f \( -name '*.rpm' -o -name '*.zip' \) -print >/newdir/myname

O find é adicionalmente realizado apenas se o cd for bem-sucedido.

    
por 06.02.2018 / 18:36
1

Este comando único faria todo o trabalho que você está fazendo:

find /mydir/nextlevel/here \( -name "*.rpm" -o -name "*.zip" \) \
    > /newdir/myname/artifacts.txt
    
por 06.02.2018 / 18:21