¿Encontrar un archivo que coincida con cierto patrón y darle ese nombre de archivo como valor a una variable en el script de Shell?

¿Encontrar un archivo que coincida con cierto patrón y darle ese nombre de archivo como valor a una variable en el script de Shell?

Estoy encontrando una manera de asignar el nombre de archivo a una variable en mi script de Shell. Pero mi archivo tiene formato de nombre comoarchivo-1.2.0-INSTANTÁNEA.txt.

Aquí los números pueden cambiar a veces, ahora ¿cómo puedo asignar este nombre de archivo a una variable? ¿Se puede utilizar cualquier expresión regular? ogrep? oencontrar? oarchivo?

Mi directorio consta de los siguientes archivos:

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

mi guiónsc.sh:

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

Ahora la versión del archivo cambia a veces. Mi script debería funcionar para cualquier número de versión.

¿Cómo puedo asignar el nombre de archivo coincidente a la variable? Ayúdame. tia

Respuesta1

Digamos que su archivo sigue este patrón file-1.2.0-SNAPSHOT.txt para que pueda ser comoarchivo-1.2.0-INSTANTÁNEA.txtoarchivo-1.3.0-INSTANTÁNEA.txtoarchivo-1.5.1-INSTANTÁNEA.txtetc., entonces puede obtener los archivos usando el comando de búsqueda como este: -

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

Le dará todos los archivos que terminan conINSTANTÁNEA.txty luego podrás usarlo para hacer tu trabajo.

Punto(.) enencontrarpuede ser un directorio principal que debería contener el archivo. Como

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

Respuesta2

Finalmente, obtuve la solución después de muchos métodos de prueba y error:

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

GraciasRakeshpor aportar turespuesta, Me ayudó.

Respuesta3

Creo que lo que estás intentando hacer es copiar solo la última versión.

#!/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"

Respuesta4

la selección se realiza mediante la opción -name y la acción se realiza mediante la opción -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
' {} {} \;

información relacionada