Come trovare i file più recenti in una directory, comprese le sottodirectory?


12

Sto cercando un modo in Windows per elencare tutti i file in una determinata directory e le sue sottodirectory, ordinati in modo che i file più recenti siano in cima. C'è un modo semplice per farlo? Mi accontenterei anche di uno script Perl.

Risposte:


3

Se sei ancora interessato a una soluzione con script, ho rapidamente lanciato qualcosa che mostrerà i file di tutte le directory insieme:

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

I file vengono visualizzati dal più recente al meno recente, mostrando solo il nome del file. In questo modo è possibile reindirizzare facilmente l'output di questo script a un altro strumento per l'elaborazione senza doversi preoccupare di eliminare l'output in eccesso.

Uso: perl find.pl <starting_directory>


Grazie. Immagino che questo avrebbe dovuto essere una domanda stackoverflow se fosse andato in questa direzione. :)
Kip

1
alcune modifiche che ho apportato (per l'aiuto di chiunque si fosse imbattuto in questo): in my $dir = ($#ARGV >= 0 ? $ARGV[0] : '.');modo da scansionare la directory corrente se non viene fornito il parametro della directory e per includere il tempo stampato:print strftime('%Y-%m-%d %H:%M:%S', localtime((stat($key))[9])) . " $key\n";
Kip

1
@Kip, il mtime dovrebbe essere memorizzato $files{$key}se si desidera utilizzarlo per strftimequando si stampa per evitare una seconda chiamata a stat(). Se hai intenzione di collegarlo a un altro programma, l'ho anche modificato per visualizzare il percorso completo dei nomi dei file. Puoi prenderlo qui: pastebin.ca/1797748
John T,

grazie, sei più veloce di me. il comando stat ha funzionato solo per i file nella directory corrente, poiché si stava memorizzando solo l'ultima parte del nome file.
Salta il

7

Come questo: dir /s /o:-d


1
hmm ... non del tutto ideale, questo elenca comunque ogni directory singolarmente, ma posso lavorarci su
Kip

5

Se hai cygwin o simili installati, allora find . -type f | xargs ls -trfarà il trucco. Puoi quasi certamente fare lo stesso con PowerShell di Microsoft.


3

Nel caso in cui tu stia usando Tutto , digita semplicemente il percorso e ordina per Data di modifica e otterrai tutti i file in questa cartella in quell'ordine, indipendentemente dalla sottodirectory.

Tutto è freeware, è disponibile una versione portatile.


1

Se non ti dispiace codificare (anche se questo porta la domanda nel territorio di Stack Overflow), allora ci sono le classi Directorye Filein C #.

Il GetFilesmetodo ha un sovraccarico che restituirà tutti i nomi di file in tutte le sottodirectory. È quindi possibile scorrere su questo elenco, chiamando GetLastWriteTimeper ottenere la data / ora modificata. Memorizza il nome e l'ora in un dizionario, ordina l'ora e stampa i nomi dei file.

C'è anche la classe DirectoryInfoe FileInfo.

Avrei dovuto aggiungere che tutte queste funzionalità sono disponibili tramite Powershell , quindi non hai accesso a un IDE completo.


Grazie. sono uno sviluppatore anche se principalmente a Java. stavo chiedendo qui sperando che fosse disponibile un'opzione shell
Kip,

@Kip - Mi sono reso conto ieri sera dopo essermi disconnesso che avrei dovuto menzionare Powershell - technet.microsoft.com/en-us/scriptcenter/dd742419.aspx - è un linguaggio di scripting ma hai accesso al runtime .NET.
ChrisF,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.