从文件夹中获取给定扩展名的第一个文件

lin*_*ndy 11 bash

我需要在具有.tar.gz扩展名的文件夹中获取第一个文件.我提出了:

FILE=/path/to/folder/$(ls /path/to/folder | grep ".tar.gz$" | head -1)
Run Code Online (Sandbox Code Playgroud)

但我觉得它可以做得更简单,更优雅.有更好的解决方案吗?

dev*_*ull 16

您可以获取数组中的所有文件,然后获得所需的文件:

files=( /path/to/folder/*.tar.gz )
Run Code Online (Sandbox Code Playgroud)

获取第一个文件:

echo "${files[0]}"
Run Code Online (Sandbox Code Playgroud)

获取最后一个文件:

echo "${files[${#files[@]}-1]}"
Run Code Online (Sandbox Code Playgroud)

您可能希望设置shell选项nullglob以在没有匹配文件时处理案例:

shopt -s nullglob
Run Code Online (Sandbox Code Playgroud)

  • 2备注:1.为了回显数组`files`的最后一个元素,命令`echo"$ {files [-1]}"`也可以.2.如果没有设置文件(和`nullglob`),你将得到一个错误_bad数组subscript_.在这种情况下,您可能希望替换为`(($ {#files [@]}))&& echo"$ {files [-1]}"`. (2认同)

BMW*_*BMW 6

这是您自己想法的较短版本。

FILE=$(ls /path/to/folder/*.tar.gz| head -1)
Run Code Online (Sandbox Code Playgroud)