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
' {} {} \;