linux - Linux 基于模式打印文件名
问题描述
我有一个要求,我需要列出具有独特模式的目录中的文件,并在重复的情况下选择最近更新的文件以避免重复记录。
文件:
File Name Update Time
Test-11121202025-20201006-111506-1601997306.txt Oct 25, 2020
Test-11121202025-20201006-111506-1801997306.txt Oct 30, 2020
Test-77722202025-20201006-111506-1601997306.txt Oct 25, 2020
在这种情况下所需的输出:
Test-01121202025-20201006-111506-1801997306.txt
Test-77722202025-20201006-111506-1601997306.txt
说明:第一个和第二个文件与我的用例相同,因为 Test-11121 (Initial 10 char ) 在最初的两个文件中是相同的,但是第二个是最近更新的,所以我将丢弃第一个。除此之外,因为第三个文件是唯一的,因为只有一个带有模式的条目(Test-77722)所以我也会认为这是在输出中。
我尝试了以下命令,但这没有帮助。我想我可以使用 shell 脚本来实现,但我想避免为这个小用例这样做
ls -lt| awk 'BEGIN{FS="-"}{ print $2 }' | sort | uniq
任何帮助将非常感激。
解决方案
这对你有用吗?
$ ls -l
total 0
-rw-rw-r-- 1 tink tink 0 2020-09-12 16:48 Test-11121202025-20201006-111506-1601997306.txt
-rw-rw-r-- 1 tink tink 0 2020-10-31 07:04 Test-11121202025-20201006-111506-1801997306.txt
-rw-rw-r-- 1 tink tink 0 2020-10-31 07:03 Test-77722202025-20201006-111506-1601997306.txt
并awk
进行救援:
$ ls -tr | awk '{a[substr($1,1,10)]=$0} END{for(i in a){print a[i]}}'
Test-77722202025-20201006-111506-1601997306.txt
Test-11121202025-20201006-111506-1801997306.txt
编辑:这个工作的方式是我们创建一个数组,由每个文件名的前 10 个字符索引,包含整个文件名。由于文件从最旧到最新排序,因此只有与前 10 个字符匹配的最后一个文件将在数组中。最后,我们只是遍历数组并输出所有最新的文件名。
推荐阅读
- neo4j - spring-boot-starter-data-neo4j 未加载 OGM 核心注释
- python - OSError:[Errno 22] 无效参数:'..\x08_epoch_model_state.pt'
- typescript - 赛普拉斯:获取 web 元素数组
- swiftui - SwiftUI 强制子视图重绘
- azure - 如何使用 arm 模板在 azure 函数中创建混合连接
- azure-active-directory - Gettiong code=organizationfromtenantguidnotfound 试图通过 Graph API 以用户身份发送电子邮件
- openshift - Openshift 应用程序健康检查
- php - 如何在php函数中一次返回多个值
- c - 构建静态库并在编译时将其链接到内核模块
- go - 我可以从方法返回匿名结构吗?