在bash脚本中查找文件扩展名中的最大索引

时间:2016-12-01 12:49:23

标签: bash sh

所以我有一堆文件夹。 File,File.0,File.1,File.2

我正在尝试在此文件的扩展名中找到最大的index。所以它必须是2。

我写了这个命令,用numeric extension计算所有文件。 但是当索引大于10时,它无法正常工作。它根本不起作用,因为我只想找到最大的索引,而不是索引中带数字的文件总和。

$1 (is file name in this case File)

y=$(echo $(ls -d $1.[0-inf] | wc -l))

我该怎么做?

2 个答案:

答案 0 :(得分:2)

第一个提示:do not parse the output of ls。特别是在你的情况下。

您可以在纯bash中使用以下脚本来解决您的问题:

docker-compose

答案 1 :(得分:1)

你可以试试这个:

for i in file\.*; do echo ${i##*.}; done | sort -g | tail -n1

${i##*.}正在删除文件名中最后一个.之前的所有内容。

sort -g正在排序为数值。

tail -n1打印最后一个索引。

更容易出错的方法是使用find命令,因为它将处理与模式不匹配的文件,带有空格的文件名......

find -type f -name "file\.*" -exec bash -c 'echo ${1/*\.}' _ "{}" \; 2>/dev/null | sort -n | tail -n1

bash -c 'echo ${1/*\.}' _ "{}"是在.之前删除字符的命令。

您可能希望在命令开头添加-maxdepth 1,以避免在目录内递归查找。