如何获取查找命令的最后结果?

时间:2019-04-18 16:03:00

标签: bash

我的find命令的结果产生以下结果

./alex20_0  
./alex20_1  
./alex20_2  
./alex20_3  

我将此结果另存为变量。现在我真正需要的唯一部分是最后一部分,或者本质上是最高编号或“最新版本”。

因此,从上面的字符串中,我需要提取的全部是./alex20_3并将其另存为变量。有没有一种方法可以只提取find命令输出的最后一个目录?

我将执行最后n个字符命令以提取它,因为它已经按顺序提取了,但是一旦到达./alex20_10版等,它就不会是相同数量的字符。

4 个答案:

答案 0 :(得分:4)

尝试一下:

your_find_command | tail -n 1

答案 1 :(得分:2)

find可以按任何顺序列出您的文件。要提取最新版本,您必须对find的输出进行排序。最安全的方法是

find . -maxdepth 1 -name "string" -print0 | sort -zV | tail -zn1

如果sorttail的实现不支持-z,并且您确定文件名没有换行符,您也可以使用

find . -maxdepth 1 -name "string" -print | sort -V | tail -n1

答案 2 :(得分:0)

可能有多种方法可以实现这一目标-

使用“ tail”命令(由@Roadowl建议)

查找分支-name alex * |尾巴-n1

使用“ awk”命令

查找分支-name alex * | awk'END {print}'

使用“ sed”命令

查找分支-name alex * | sed -e'$!d'

其他可能的选项是使用bash脚本,perl或任何其他语言。最好的选择就是找到一个更方便的选择。

答案 3 :(得分:0)

由于要按最高版本对文件名进行排序,因此可以尝试如下操作

$ ls
alex20_0    alex20_1    alex20_2    alex20_3
$ find .  -iname "*alex*" -print | sort  | tail -n 1
./alex20_3