我正在增强我的linux脚本,我有一个文件夹,里面有很多不同日期的文件,我想获取一个以特定名称开头的最新文件。
例如。
我有下面的文件列表中的文件夹,我需要名称Subnetwork_RAN的文件夹中的最新文件:
Subnetwork_PCC_11Dec2022UTC0500
Subnetwork_RAN_12Dec2022UTC0500
Subnetwork_RAN_13Dec2022UTC0500
Subnetwork_PCC_13Dec2022UTC0500
输出文件名为子网_RAN_13Dec2022UTC0500
我试图建立一个Linux shell 脚本,以获得特定名称的最新文件。
2条答案
按热度按时间eufgjt7s1#
这个问题有一个相当简单的
awk
解决方案:ls -tl
输出当前目录的长列表,按时间排序(最新的排在前面)。这个输出通过管道传输到
awk
,awk
逐行查找包含所需字符串的文件名,第一次找到时,打印文件名并退出。注意,这是假设文件名中不包含白色(如示例中所示),如果包含空格,则需要修改print语句,将以字符串开头的
$0
行的子字符串打印到该行的末尾。如果您的字符串可能在较新的文件名中重复,但不在开头,则可以修改regex条件,以便仅选择字符串开头为
$9~/^Subnetwork_RAN/
的文件名guykilcj2#
假设你有一个名为
test.txt
的文件,文件名如前所示,那么在bash中你可以这样做:输出:
Subnetwork_RAN_13Dec2022UTC0500
一些解释:
$0 ~ /Subnetwork_RAN/
匹配包含子字符串“Subnetwork_RAN”的所有行date
可以识别类似于13Dec2022UTC0500的日期格式,并将其转换为时间戳(date +%s
)sort
根据第二个字段(awksystem
调用的时间戳输出)按逆序进行数字排序head
给出第一行,即最近的cut
只接受第一个字段,字段分隔符等于““。第一个字段是完整的文件名(在awk中调用printf
)