我尝试搜索文件,并将路径和版本另存为变量,因为稍后将需要每个文件来创建目录并在所需路径中解压缩.jar。
file=$(find /home/user/Documents/test/ -path *.jar)
version=$(echo "$file" | grep -P -o '[0-9].[0-9].[0-9].[0-9]')
path=$(echo "$file" | sed 's/\(.*\)[/].*/\1/')
newpath=$(echo "${path}/${version}")
echo "$newpath"
结果
> /home/user/Documents/test/gb0500
> /home/user/Documents/test/gb0500 /home/user/Documents/test/gb0500
> /home/user/Documents/test /home/user/Documents/test/1.3.2.0
> 1.3.2.1
> 1.3.2.2
> 1.2.0.0
> 1.3.0.0
这很有趣,它只能在一行上工作。我还尝试了什么:
file=$(find /home/v990549/Dokumente/test/ -path *.jar)
version=$(grep -P -o '[0-9].[0-9].[0-9].[0-9]')
path=$(sed 's/\(.*\)[/].*/\1/')
while read $file
do
echo "$path$version"
done
我没有脚本编写经验。那就是我几天前想出来的。我只是在练习,试图使生活更轻松。
查找输出:
/home/user/Documents/test/gb0500/gb0500-koetlin-log4j2-web-1.3.2.0-javadoc.jar
/home/user/Documents/test/gb0500/gb0500-koetlin-log4j2-web-1.3.2.1-javadoc.jar
/home/user/Documents/test/gb0500/gb0500-koetlin-log4j2-web-1.3.2.2-javadoc.jar
/home/user/Documents/test/gb0500-co-log4j2-web-1.2.0.0-javadoc.jar
/home/user/Documents/test/gb0500-commons-log4j2-web-1.3.0.0-javadoc.jar
由于两个变量version
和path
都用换行符分隔,怎么办:
file=$(find /home/user/Documents/test/ -path *.jar)
version=$(echo "$file" | grep -P -o '[0-9].[0-9].[0-9].[0-9]')
path=$(echo "$file" | sed 's/\(.*\)[/].*/\1/')
paste -d "/" <<<"${path}" <<<"${version}"
注意,前三行已not修改。
BTW我不建议在单个变量中存储多个文件名由于一些原因,它是用换行符分隔的变量:
path=${file%/*}
仅包含一个,则第三行为file
。希望这会有所帮助。
查找,sh和PE;西方最快的枪支
find /home/user/Documents/test/ -name '*.jar' -exec sh -c '
for pname; do
path="${pname%/*}"
version="${pname%"${pname##*[0-9].[0-9].[0-9].[0-9]}"}"
version="${version#"${version%???????}"}"
echo "$path/$version"
done' _ {} +
我有意避免了脚本中的外部实用程序,但是如果您不喜欢这些参数扩展,可以改用grep / sed。