Jak znaleźć najnowsze pliki w katalogu, w tym w podkatalogach?

12

Szukam sposobu w systemie Windows, aby wyświetlić listę wszystkich plików w danym katalogu i jego podkatalogach, posortowanych tak, aby najnowsze pliki były na wierzchu. Czy jest jakiś prosty sposób to zrobić? Zadowoliłbym się również skryptem Perla.

Wyrko
źródło

Odpowiedzi:

3

Jeśli nadal jesteś zainteresowany rozwiązaniem skryptowym, szybko zrzuciłem coś, co wyświetli pliki ze wszystkich katalogów razem:

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

Pliki są wyświetlane od najnowszych do najstarszych, pokazując tylko nazwę pliku. W ten sposób możesz łatwo przesłać dane wyjściowe tego skryptu do innego narzędzia do przetwarzania bez martwienia się o usunięcie nadmiaru danych wyjściowych.

Stosowanie: perl find.pl <starting_directory>

John T.
źródło
dzięki. Myślę, że to powinno być pytanie o przepełnienie stosu, jeśli poszło w tym kierunku. :)
Kip
1
kilka zmian, które wprowadziłem (aby pomóc każdemu, kto się z tym zetknie): my $dir = ($#ARGV >= 0 ? $ARGV[0] : '.');aby skanował bieżący katalog, jeśli parametr katalogu nie zostanie podany, i uwzględniał wydrukowany czas:print strftime('%Y-%m-%d %H:%M:%S', localtime((stat($key))[9])) . " $key\n";
Kip
1
@Kip, mtime powinien być zapisany, $files{$key}jeśli chcesz go użyć strftimepodczas drukowania, aby uniknąć drugiego połączenia z stat(). Jeśli planujesz przesłać go do innego programu, zmodyfikowałem go tak, aby wyświetlał pełną ścieżkę do nazw plików. Możesz to pobrać tutaj: pastebin.ca/1797748
John T
dzięki, jesteś szybszy niż ja. polecenie stat działało tylko dla plików w bieżącym katalogu, ponieważ zapisałeś tylko ostatnią część nazwy pliku.
Kip
7

Lubię to: dir /s /o:-d

SLaks
źródło
1
hmm ... niezupełnie idealne, to wciąż wyświetla każdy katalog osobno, ale mogę z nim pracować
Kip
5

Jeśli masz zainstalowany program Cygwin lub podobny, find . -type f | xargs ls -trzrobi to samo. Prawie na pewno możesz zrobić podobnie z PowerShellem Microsoft.

David Spillett
źródło
3

Jeśli korzystasz z Wszystko , po prostu wpisz ścieżkę i sortuj według Data modyfikacji, a otrzymasz wszystkie pliki w tym folderze w tej kolejności, niezależnie od podkatalogu.

Wszystko jest darmowe, dostępna jest wersja przenośna.


źródło
1

Jeśli nie przeszkadza kodowania (choć trwa to pytanie na terytorium stosu przepełnieniem) wtedy nie Directoryi Fileklas w języku C #.

GetFilesMetoda ma przeciążenia, która zwróci wszystkie nazwy plików we wszystkich podkatalogów. Następnie możesz przejrzeć tę listę, wywołując GetLastWriteTimezmodyfikowaną datę / godzinę. Zapisz nazwę i czas w słowniku, posortuj według czasu i wydrukuj nazwy plików.

Są też klasy DirectoryInfoi FileInfo.

Powinienem dodać, że cała ta funkcjonalność jest dostępna przez Powershell , więc nie masz dostępu do pełnego IDE.

ChrisF
źródło
dzięki. Jestem programistą, ale głównie w Javie. pytałem tutaj, mając nadzieję, że opcja powłoki będzie dostępna
Kip
@Kip - uświadomiłem sobie zeszłej nocy, kiedy się wylogowałem, że powinienem wspomnieć o Powershell - technet.microsoft.com/en-us/scriptcenter/dd742419.aspx - to język skryptowy, ale masz dostęp do środowiska uruchomieniowego .NET.
ChrisF