如何在目录(包括子目录)中找到最新文件?


12

我正在Windows中寻找一种列出给定目录及其子目录中所有文件的方式,以便对所有文件进行排序,以使最新文件位于顶部。有没有简单的方法可以做到这一点?我也会选择Perl脚本。

Answers:


3

如果您仍然对脚本化解决方案感兴趣,那么我会迅速将一些东西放在一起,这些东西将一起显示所有目录中的文件:

#!C:/Perl/bin/perl.exe
use File::Find;

my %files = ();

sub process
{
    $files{$_} = (stat($_))[9] unless -d $_;
}

find (\&process, $ARGV[0]);

foreach my $key(sort {$files{$b} <=> $files{$a}} keys %files)
{
    print "$key\n";
}

文件显示从最新到最早,仅显示文件名。这样,您可以轻松地将此脚本的输出传递到另一个工具进行处理,而不必担心会剥离多余的输出。

用法: perl find.pl <starting_directory>


谢谢。我猜这应该是一个stackoverflow问题,如果它朝这个方向发展。:)
Kip 2010年

1
我进行了一些更改(以帮助碰巧遇到此问题的任何人): my $dir = ($#ARGV >= 0 ? $ARGV[0] : '.');这样,如果未提供目录参数,它将扫描当前目录,并包括打印时间:print strftime('%Y-%m-%d %H:%M:%S', localtime((stat($key))[9])) . " $key\n";
Kip

1
@Kip,$files{$key}如果要strftime在打印时使用它,则应将mtime存储在其中,以避免再次调用stat()。如果您打算将其管道传输到另一个程序,则我还对其进行了修改,以显示文件名的完整路径。您可以在此处获取:pastebin.ca/1797748
John T 2010年

谢谢,你比我快。stat命令也仅适用于当前目录中的文件,因为您仅存储文件名的最后一部分。
Kip 2010年

7

像这样: dir /s /o:-d


1
嗯...不是很理想,它仍然单独列出每个目录,但是我可以使用它
Kip 2010年

5

如果您安装了cygwin或类似软件,则find . -type f | xargs ls -tr可以解决问题。您几乎可以肯定可以使用Microsoft的powershell进行类似的操作。


3

如果您使用的是Everything,则只需键入路径并按“ 修改日期”排序,您将以该顺序获得此文件夹中的所有文件,而不管子目录是什么。

一切都是免费软件,便携式版本可用。


1

如果您不介意编码(尽管这会将问题带入Stack Overflow领域),则C#中有Directoryand File类。

GetFiles方法有一个重载,它将返回所有子目录中的所有文件名。然后,您可以遍历此列表,调用GetLastWriteTime以获取修改的日期/时间。将名称和时间存储在字典中,按时间排序并打印出文件名。

还有DirectoryInfoFileInfo类。

我应该补充说所有这些功能都可以通过Powershell获得,因此您无权访问完整的IDE。


谢谢。我主要是用Java开发的。我在这里问是否希望可以使用Shell选项
Kip 2010年

@Kip -昨晚我意识到,我退出,我应该提到PowerShell的后- technet.microsoft.com/en-us/scriptcenter/dd742419.aspx -这是一个脚本语言,但你必须访问.NET运行库。
克里斯·弗里德(ChrisF)2010年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.