Encontrar um arquivo que corresponda a determinado padrão e fornecer esse nome de arquivo como valor para uma variável no shell script?

Encontrar um arquivo que corresponda a determinado padrão e fornecer esse nome de arquivo como valor para uma variável no shell script?

Estou encontrando uma maneira de atribuir o nome do arquivo a uma variável em meu script de shell. Mas meu arquivo tem formato de nomenclatura comoarquivo-1.2.0-SNAPSHOT.txt.

Aqui os números podem mudar algumas vezes, agora como posso atribuir este nome de arquivo a uma variável. Qualquer regex pode ser usado? ougrep? ouencontrar? ouarquivo?

Meu diretório consiste nos seguintes arquivos:

file-1.2.0-SNAPSHOT.txt
newFile-1.0.0.txt
sample.txt

Meu roteirosc.sh:

file_path="/home/user/handsOn"
var=$file_path/file-1.2.0-SNAPSHOT.txt
newLocation=/new_path
cp $var $newLocation

Agora, a versão do arquivo muda algumas vezes. Meu script deve funcionar para qualquer número de versão.

Como posso atribuir o nome do arquivo correspondente à variável? Me ajude. TIA

Responder1

Digamos que seu arquivo esteja seguindo este padrão file-1.2.0-SNAPSHOT.txt para que possa ser assimarquivo-1.2.0-SNAPSHOT.txtouarquivo-1.3.0-SNAPSHOT.txtouarquivo-1.5.1-SNAPSHOT.txtetc., então você pode obter os arquivos usando o comando find como este: -

find . -type f -iname "*SNAPSHOT.txt" 

Ele lhe dará todos os arquivos que terminam comINSTANTÂNEO.txte então você pode usá-lo para fazer seu trabalho.

Ponto(.) emencontrarpode ser um diretório pai que deve conter o arquivo. Como

find ~/my_files/ -type f -iname "*SNAPSHOT.txt" 

Responder2

Finalmente, consegui a solução após muitos métodos de tentativa e erro:

cd $file_path && fVar=$(find -type f -name 'file-[0-9].[0-9].[0-9]-SNAPSHOT.txt');

echo $fVar    # output is like ./file-1.2.0-SNAPSHOT.txt

fT=${fVar:2}  # removing first two characters'./'

echo "$fT"    # output is file-1.2.0-SNAPSHOT.txt

ObrigadoRakeshpor contribuir com seuresponder, isso me ajudou.

Responder3

Acho que o que você está tentando fazer é copiar apenas a última versão.

#!/bin/bash
oldlocation="/file_path/"
newlocation="/new_path/"

cd "$oldlocation"

#Get the last version
file="$(ls  *SNAPSHOT.txt | sort -V | tail -n1)"

cp -v "$file" "$newlocation" && echo "Everything is ok"

Responder4

a seleção acontece por meio da opção -name e a ação é por meio da opção -exec.

find . -type f -name '*-[0-9].[0-9].[0-9]-SNAPSHOT.txt' -exec sh -c '
  file=$1
  # do what you want with $file as many times as you want
' {} {} \;

informação relacionada