查找与特定模式匹配的文件并将该文件名作为值赋予 shell 脚本中的变量?

Ejj*_*esh 10 linux bash shell-script

我正在寻找一种方法来获取分配给我的 shell 脚本中的变量的文件名。但是我的文件的命名格式为file-1.2.0-SNAPSHOT.txt

这里的数字有时可能会改变,现在我如何将此文件名分配给变量。可以使用任何正则表达式吗?或grep?或找到?或文件

我的目录由以下文件组成:

file-1.2.0-SNAPSHOT.txt
newFile-1.0.0.txt
sample.txt
Run Code Online (Sandbox Code Playgroud)

我的脚本sc.sh

file_path="/home/user/handsOn"
var=$file_path/file-1.2.0-SNAPSHOT.txt
newLocation=/new_path
cp $var $newLocation
Run Code Online (Sandbox Code Playgroud)

现在文件版本有时会更改。我的脚本应该适用于任何版本号。

如何将匹配的文件名分配给变量?帮帮我。TIA

小智 10

假设您的文件遵循此模式 file-1.2.0-SNAPSHOT.txt,因此它可以类似于file-1.2.0-SNAPSHOT.txtfile-1.3.0-SNAPSHOT.txtfile-1.5.1-SNAPSHOT。 txt等,然后您可以使用 find 命令获取文件,如下所示:-

find . -type f -iname "*SNAPSHOT.txt" 
Run Code Online (Sandbox Code Playgroud)

它会给你所有以SNAPSHOT.txt结尾的文件,然后你可以用它来做你的工作。

find 中的点(.)可以是应该包含文件的父目录。像作为

find ~/my_files/ -type f -iname "*SNAPSHOT.txt" 
Run Code Online (Sandbox Code Playgroud)


Ejj*_*esh 6

经过多次尝试和错误的方法,最终得到了解决方案:

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
Run Code Online (Sandbox Code Playgroud)

感谢Rakesh贡献您的答案,它对我有帮助。


Luc*_*ini 5

我认为您想要做的就是仅复制最后一个版本。

#!/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"
Run Code Online (Sandbox Code Playgroud)