查找更高版本的文件
Find the file with higher version
我在Linuxbash工作。
我有一个目录,里面有这样的文件:
- xpto-10.20.30.tar.xz
- xpto-10.20.30.tar.xz
- xpto-20.20.30.tar.xz
- xpto-30.20.30.tar.xz
- xpto-10.20.30.tar.xz
- xpto-40.20.30.tar.xz
- xpto-40.20.9.tar.xz
我想获取最新的文件版本名,应该是xpto-40.20.30.tar.xz.
我正在使用这个脚本:
#!/bin/bash
set_latest () {
eval "latest=${$#}"
}
set_latest xpto-*.tar.xz
echo "The highest-numbered file is $latest"
但我得到的结果是它的 xpto-40.20。9.tar.xz
我猜这是因为字符数。
我怎样才能得到最新的文件版本名称(考虑到这种情况)?
有没有办法只获得版本“40.30.30”?
建议:
ls -1 *.tar.xz| sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}" |sort|tail -1|sed -E "s|0([1-9])||g"
以更易读的方式:
ls -1 *.tar.xz|\
sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}" |\
sort|\
tail -1|\
sed -E "s|0([1-9])||g"
渐进运行
ls -1 *.tar.xz |
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"|sort
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"|sort|tail -1
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"|sort|tail -1|0([1-9])||g"
说明
ls -1 *.tar.xz
列出当前目录中后缀为 .tar.xz
的所有文件。每行一个文件名。
sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"
在每个文件名中以个位数为前缀0
sort
对所有文件名进行词汇排序
tail -1
获取最后一个文件名
sed -E "s|0([1-9])||g"
从文件名中的 2 位数字中删除 0 前缀
我在Linuxbash工作。
我有一个目录,里面有这样的文件:
- xpto-10.20.30.tar.xz
- xpto-10.20.30.tar.xz
- xpto-20.20.30.tar.xz
- xpto-30.20.30.tar.xz
- xpto-10.20.30.tar.xz
- xpto-40.20.30.tar.xz
- xpto-40.20.9.tar.xz
我想获取最新的文件版本名,应该是xpto-40.20.30.tar.xz.
我正在使用这个脚本:
#!/bin/bash
set_latest () {
eval "latest=${$#}"
}
set_latest xpto-*.tar.xz
echo "The highest-numbered file is $latest"
但我得到的结果是它的 xpto-40.20。9.tar.xz
我猜这是因为字符数。 我怎样才能得到最新的文件版本名称(考虑到这种情况)? 有没有办法只获得版本“40.30.30”?
建议:
ls -1 *.tar.xz| sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}" |sort|tail -1|sed -E "s|0([1-9])||g"
以更易读的方式:
ls -1 *.tar.xz|\
sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}" |\
sort|\
tail -1|\
sed -E "s|0([1-9])||g"
渐进运行
ls -1 *.tar.xz |
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"|sort
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"|sort|tail -1
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"|sort|tail -1|0([1-9])||g"
说明
ls -1 *.tar.xz
列出当前目录中后缀为 .tar.xz
的所有文件。每行一个文件名。
sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"
在每个文件名中以个位数为前缀0
sort
对所有文件名进行词汇排序
tail -1
获取最后一个文件名
sed -E "s|0([1-9])||g"
从文件名中的 2 位数字中删除 0 前缀