Como catar um arquivo com opções “ou”

1

Eu tenho um nome de arquivo como

/etc/auto.abc on server 1
/etc/auto.def on server 2
/etc/auto.ghi on server 1

Estou escrevendo um único script para todos os servidores e quero catar o arquivo.

Exemplo: cat /etc/auto.abc ou /etc/auto.def ou /etc/auto.ghi . Deve poder levar o arquivo que está presente.

Obrigado,

    
por venella 14.12.2016 / 18:40

3 respostas

0

Por que não usar um script para verificar a existência do arquivo antes de tentar executar uma operação nele?

#!/bin/bash
if test -f "/etc/auto.def"; then cat /etc/auto.def;
elif test -f "/etc/auto.ghi"; then cat /etc/auto.ghi;
elif test -f "/etc/auto.abc"; then cat /etc/auto.abc;fi

Fontes:

link

link

    
por 14.12.2016 / 18:55
2

Algo parecido com isto:

if [[ $(find . -name "auto*" -type f -maxdepth 1 -printf '\n' | wc -l) -eq 1 ]]
then
   cat auto*
else
   echo there are more files that match 'auto*'
fi

-printf '\n' está lá para manipular nomes de arquivos que contêm novas linhas corretamente (consulte esta resposta ). Em else você deve lidar com a situação se houver mais de um arquivo que corresponda a auto* padrão - a decisão é sua o que fazer aqui.

    
por 14.12.2016 / 18:54
0

Você já pensou em usar globs de arquivos ?

O caminho mais permissivo seria:

cat /etc/auto*

Mas melhor no seu caso seria:

cat /etc/auto.???

É claro que if pode haver outros arquivos indesejados correspondentes a glob, ou se pode haver mais de um dos três arquivos presentes (e você só quer um) , isso não leva em conta todas essas possibilidades. Mas é certamente o caminho mais simples

.

    
por 14.12.2016 / 21:55