linux ls 按照创建日期,如何执行ls,然后按创建日期对结果进行排序?

这是一个Perl脚本,它使用Totor的答案来实现所需的内容(如果文件系统是ext4)。

可以在我的家用计算机(Ubuntu)和服务器(CentOS)上运行,但是没有经过测试,因此是ymmv。

#!/usr/bin/env perl

use Modern::Perl '2009';

use DateTime;

# Open the current directory for reading

opendir my $dh, "." or die "Unable to open directory: $!";

# Create a hash to save results into

my %results;

my %datestamp;

# Loop through the directory getting creation date stats for each file

while ( my $filename = readdir $dh ) {

# Skip non-files

next if $filename eq '.' or $filename eq '..';

# Save the ls output for this file/directory

$results{ $filename } = `ls -ld $filename`;

my $stats = `debugfs -R 'stat $filename' /dev/sda6 2>/dev/null`;

# crtime: 0x51cd731c:926999ec -- Fri Jun 28 12:27:24 2013

$stats =~ m/crtime\: \w+\:\w+ -- (.+?)\n/s;

my $datestring = $1;

# Dissect date with a regexp, ick

my %months = (

'Jan' => '1',

'Feb' => '2',

'Mar' => '3',

'Apr' => '4',

'May' => '5',

'Jun' => '6',

'Jul' => '7',

'Aug' => '8',

'Sep' => '9',

'Oct' => '10',

'Nov' => '11',

'Dec' => '12',

);

$datestring =~ m/\w+ (\w+) ?(\d+) (\d\d)\:(\d\d)\:(\d\d) (\d\d\d\d)/;

# Convert date into a more useful format

my $dt = DateTime->new(

year => $6,

month => $months{$1},

day => $2,

hour => $3,

minute => $4,

second => $5,

);

# Save the datestamp for this result

$datestamp{ $filename } = $dt->iso8601;

}

# Output in date order

my @filenames = sort { $datestamp{$a} gt $datestamp{$b} } keys %datestamp;

foreach my $filename ( @filenames ) {

print $results{ $filename };

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值