You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash或Perl按创建时间将TXT文件名转为指定JSON格式

需求描述

当前目录文件列表如下:

➜  tmp.lDrLPUOF ls
1.txt 2.txt 3.txt 1.zip 2.rb

需要将所有TXT文件按创建时间升序排序后,生成特定JSON格式。文件创建时间如下:

➜  tmp.lDrLPUOF ls -lTr
total 0
-rw-r--r--  1 administrator  staff  0 Oct 12 09:35:05 2022 3.txt
-rw-r--r--  1 administrator  staff  0 Oct 12 09:35:08 2022 2.txt
-rw-r--r--  1 administrator  staff  0 Oct 12 09:35:12 2022 1.txt

最终期望的JSON格式:

{
  "": [
    {
      "title": "",
      "file": "3"
    },
    {
      "title": "",
      "file": "2"
    },
    {
      "title": "",
      "file": "1"
    }
  ]
}

请问能否用Bash或Perl实现该需求?

实现方案

方法一:Bash结合jq实现

利用ls按创建时间排序,提取文件名后通过jq构建合法JSON:

分步写法(易读性高)

# 初始化JSON结构
echo '{"": [' > output.json

# 遍历排序后的txt文件,生成每个条目
ls -lTr *.txt | awk '{print $NF}' | sed 's/\.txt$//' | while read -r fname; do
  echo "  {\"title\": \"\", \"file\": \"$fname\"},"
done | sed '$ s/,$//' >> output.json

# 闭合JSON结构
echo ']}' >> output.json

简洁管道写法

ls -lTr *.txt | awk '{sub(/\.txt$/,"",$NF); print $NF}' | \
jq -n --argjson items "$(jq -R '.' | jq -s 'map({"title": "", "file": .})')" \
'{"": $items}'

方法二:Perl实现

Perl可直接完成文件排序与JSON生成,无需依赖外部工具:

use strict;
use warnings;
use JSON;

# 按文件创建时间(stat的第11个字段)升序获取所有txt文件
my @files = sort { (stat $a)[10] <=> (stat $b)[10] } glob "*.txt";

# 处理文件名并构建条目数组
my @items;
foreach my $file (@files) {
    $file =~ s/\.txt$//;
    push @items, { title => "", file => $file };
}

# 生成带格式的JSON并输出
my $json = JSON->new->pretty;
print $json->encode({ "" => \@items });

内容的提问来源于stack exchange,提问作者hustnzj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:40:50