尋找與特定模式相符的檔案並將該檔案名稱作為值賦給 shell 腳本中的變數?

尋找與特定模式相符的檔案並將該檔案名稱作為值賦給 shell 腳本中的變數?

我正在尋找一種方法來將檔案名稱指派給 shell 腳本中的變數。但我的文件的命名格式為文件-1.2.0-SNAPSHOT.txt

這裡的數字有時可能會改變,現在我如何將此檔案名稱指派給變數。可以使用任何正規表示式嗎?或者grep?或者尋找?或者文件

我的目錄包含以下檔案:

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

我的劇本腳本文件

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

相關內容