Làm cách nào để tìm các tệp mới nhất trong một thư mục, bao gồm các thư mục con?


12

Tôi đang tìm cách trong Windows để liệt kê tất cả các tệp trong một thư mục nhất định và các thư mục con của nó, được sắp xếp sao cho các tệp mới nhất nằm trên cùng. Có cách nào dễ dàng để làm điều này? Tôi cũng sẽ giải quyết cho một kịch bản Perl.

Câu trả lời:


3

Nếu bạn vẫn quan tâm đến giải pháp theo kịch bản, tôi đã nhanh chóng kết hợp một thứ gì đó sẽ hiển thị các tệp từ tất cả các thư mục lại với nhau:

#!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";
}

Các tệp được hiển thị mới nhất đến cũ nhất, chỉ hiển thị tên tệp. Bằng cách này, bạn có thể dễ dàng chuyển đầu ra của tập lệnh này sang một công cụ khác để xử lý mà không phải lo lắng về việc tước đầu ra dư thừa.

Sử dụng: perl find.pl <starting_directory>


cảm ơn. Tôi đoán đây có lẽ là một câu hỏi stackoverflow nếu nó đi theo hướng này. :)
Kip

1
một vài thay đổi tôi đã thực hiện (để có sự giúp đỡ của bất kỳ ai tình cờ gặp phải điều này): my $dir = ($#ARGV >= 0 ? $ARGV[0] : '.');để nó sẽ quét thư mục hiện tại nếu tham số thư mục không được cung cấp và bao gồm thời gian được in:print strftime('%Y-%m-%d %H:%M:%S', localtime((stat($key))[9])) . " $key\n";
Kip

1
@Kip, mtime nên được lưu trữ $files{$key}nếu bạn muốn sử dụng nó strftimekhi in để tránh cuộc gọi thứ hai stat(). Nếu bạn dự định chuyển nó sang chương trình khác, tôi cũng đã sửa đổi nó để hiển thị đường dẫn đầy đủ của tên tệp. Bạn có thể lấy nó ở đây: pastebin.ca/1797748
John T

cảm ơn, bạn nhanh hơn tôi lệnh stat chỉ hoạt động cho các tệp trong thư mục hiện tại, vì bạn chỉ lưu trữ phần cuối của tên tệp.
Kip

7

Như thế này: dir /s /o:-d


1
hmm ... không hoàn toàn lý tưởng, điều này vẫn liệt kê từng thư mục riêng lẻ, nhưng tôi có thể làm việc với nó
Kip

5

Nếu bạn đã cài đặt Cygwin hoặc tương tự thì find . -type f | xargs ls -trsẽ thực hiện thủ thuật. Bạn gần như chắc chắn có thể làm tương tự với powershell của Microsoft.


3

Trong trường hợp bạn đang sử dụng Mọi thứ , chỉ cần nhập đường dẫn và sắp xếp theo Ngày Sửa đổi và bạn sẽ nhận được tất cả các tệp trong thư mục này theo thứ tự đó, bất kể thư mục con.

Tất cả mọi thứ là phần mềm miễn phí, một phiên bản di động có sẵn.


1

Nếu bạn không bận tâm về mã hóa (mặc dù điều này đặt câu hỏi vào lãnh thổ Stack Overflow) thì có DirectoryFilecác lớp trong C #.

Các GetFilesphương pháp có một tình trạng quá tải mà sẽ trả lại tất cả tên tập tin trong tất cả các thư mục con. Sau đó, bạn có thể lặp qua danh sách này, gọi GetLastWriteTimeđể lấy ngày / giờ sửa đổi. Lưu trữ tên và thời gian trong một từ điển, sắp xếp thời gian và in tên tập tin.

Ngoài ra còn có DirectoryInfoFileInfocác lớp.

Tôi nên nói thêm rằng tất cả các chức năng này đều có sẵn thông qua Powershell , vì vậy bạn không có quyền truy cập vào một IDE đầy đủ.


cảm ơn. Tôi là một nhà phát triển mặc dù chủ yếu trong java. tôi đã hỏi ở đây với hy vọng có sẵn tùy chọn shell
Kip

@Kip - Tôi nhận ra đêm qua sau khi tôi đăng xuất rằng tôi nên đề cập đến Powershell - technet.microsoft.com/en-us/scriptcenter/dd742419.aspx - đó là ngôn ngữ kịch bản nhưng bạn có quyền truy cập vào thời gian chạy .NET.
ChrisF

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.