Найти файл, соответствующий определенному шаблону, и присвоить это имя файла в качестве значения переменной в скрипте оболочки?

Найти файл, соответствующий определенному шаблону, и присвоить это имя файла в качестве значения переменной в скрипте оболочки?

Я ищу способ получить имя файла, назначенное переменной в моем скрипте оболочки. Но мой файл имеет формат именования какфайл-1.2.0-SNAPSHOT.txt.

Здесь числа иногда могут меняться, теперь как мне присвоить это имя файла переменной. Любое регулярное выражение можно использовать? илигрэп? илинаходить? илифайл?

Мой каталог состоит из следующих файлов:

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

Мой сценарийsc.ш:

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

Теперь версия файла иногда меняется. Мой скрипт должен работать для любого номера версии.

Как мне присвоить совпадающее имя файла переменной? Помогите мне. TIA

решение1

Допустим, ваш файл соответствует этому шаблону file-1.2.0-SNAPSHOT.txt, поэтому он может выглядеть так:файл-1.2.0-SNAPSHOT.txtилифайл-1.3.0-SNAPSHOT.txtилифайл-1.5.1-SNAPSHOT.txtи т. д., то вы можете получить файлы, используя команду find, например, так:

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

Он выдаст вам все файлы, которые заканчиваются наСНИМОК.txtи затем вы можете использовать его для выполнения своей работы.

Точка(.) внаходитьможет быть родительским каталогом, который должен содержать файл. Например,

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

решение2

Наконец, после многих методов проб и ошибок я нашел решение:

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

СпасибоРакешза ваш вкладотвечать, мне это помогло.

решение3

Я думаю, вы пытаетесь скопировать только последнюю версию.

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

решение4

Выбор осуществляется с помощью параметра -name, а действие - с помощью параметра -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
' {} {} \;

Связанный контент