查找与特定模式匹配的文件并将该文件名作为值赋给 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
' {} {} \;

相关内容