我正在寻找一种方法来将文件名分配给 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
答案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
' {} {} \;