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.txt或file-1.3.0-SNAPSHOT.txt或file-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)
经过多次尝试和错误的方法,最终得到了解决方案:
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)
我认为您想要做的就是仅复制最后一个版本。
#!/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)
| 归档时间: |
|
| 查看次数: |
62422 次 |
| 最近记录: |