Я ищу способ получить имя файла, назначенное переменной в моем скрипте оболочки. Но мой файл имеет формат именования какфайл-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
' {} {} \;