对文件排序两次

对文件排序两次

我有一系列 300 多个文件,需要排序两次,一次按日期排序,第二次在该日期内按文件名的一部分排序。
名称中的唯一标准是以 结尾*mmddyyyy<time stamp>.csv,其中文件名的第一部分可以包含任何内容。我知道ls -ltr给了我日期排序,但我似乎无法捕获和排序最后一个 keydef 的一部分。

答案1

鉴于从末尾查看文件名时,它们具有可预测的格式(扩展名然后时间然后日期),人们可以利用这一事实并使用以下命令:

ls -1 | rev | sort -t '~' -k1.14,1.14 -k1.13,1.13 -k1.12,1.12 -k1.11,1.11 -k1.18,1.18 -k1.17,1.17 -k1.16,1.16 -k1.15,1.15 | rev

说明:
- 文件名首先被反转,以便我们可以访问所需的格式
- 然后根据我们的需要,将结果逐个字符排序:
- - 字符 11 到 14 是年份(按相反顺序)
- - 字符 17到 18 是月份(按相反顺序)
- - 字符 15 到 16 是日期(按相反顺序)
- 最后发生另一个反转,以原始名称显示它们

我使用波形符~作为分隔符,以便将整个文件名组合在一个字段中,但您可以使用不同的分隔符(它必须是文件名中从未出现的字符),或者只使用.(点)来将文件名拆分为多个字段(如果它们的数量始终相同),以便您可以指定要排序的其他部分 - 对于第二个问题。

相关内容