gpt4 book ai didi

perl - 打开目录并按创建日期对文件进行排序

转载 作者:行者123 更新时间:2023-12-02 08:00:23 25 4
gpt4 key购买 nike

我需要打开目录并按文件创建时间对文件进行排序。我可以找到一些讨论,使用 Perl 标签、排序和文件,根据修改日期对文件进行排序。我认为这是比按创建日期排序更常见的需求。我用 Perl。之前有一些关于按 Perl 以外的其他语言(例如 php 或 java)的创建日期排序的帖子。

例如,我需要执行以下操作:

opendir(DIR, $ARGV[0]);                             
my @files = "sort-by-date-created" (readdir(DIR));
closedir(DIR);

do things with @files...

CPAN 有一个关于排序命令的页面,但我不太容易访问它,而且我在页面上找不到“日期”或“创建”一词。

为了回应编辑,我应该说我使用 Mac,操作系统 10.7。我知道在 Finder 中,有一个按创建日期排序选项,因此必须有某种创建日期的指示以某种方式附加到该系统中的文件。

为了响应答案,这里是尝试对文件进行排序的脚本的另一个版本:

#!/usr/bin/perl
use strict; use warnings;

use File::stat; # helps with sorting files by ctime, the inode date that hopefully can serve as creation date

my $usage = "usage: enter name of directory to be scanned for SNP containing lines\n";
die $usage unless @ARGV == 1;

opendir(DIR, $ARGV[0]); #open directory for getting file list
#my @files = (readdir(DIR));
my @file_list = grep ! /^\./, readdir DIR;
closedir(DIR);

print scalar @file_list."\n";

for my $file (sort {
my $a_stat = stat($a);
my $b_stat = stat($b);
$a_stat->mtime <=> $b_stat->mtime;
} @file_list ) {
say "$file";
}

最佳答案

您可以通过向 sort 提供子例程或代码块来自定义排序顺序。功能。

  • 在此子或 block 中,您需要使用特殊变量 $a$b ,它们表示比较时 @array 中的值。
  • 子或 block 需要返回小于、等于或大于 0 的值指示是否 $a小于、等于或大于$b (分别)。
  • 您可以使用特殊的比较运算符(数字为 <=>,字符串为 cmp)来完成此操作。

所以默认排序sort @numbers相当于 sort {$a <=> $b} @numbers .

如果按照创建时间排序,可以使用 stat函数来获取有关文件的信息。它返回有关文件的一系列信息,其中一些信息可能不适用于您的平台。文件的最后修改时间通常是安全的,但创建时间则不然。 ctime (它返回的第 11 个值)尽可能接近(它代表 *nix 上的 inode 更改时间,win32 上的创建时间),表示为自纪元以来的秒数,这很方便,因为这意味着您可以进行简单的数字排序。

my @files = sort {(stat $a)[10] <=> (stat $b)[10]} readdir($dh);

我不确定您是否也想过滤掉目录。如果是这种情况,您可能还想使用 grep .

关于perl - 打开目录并按创建日期对文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16095767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com