Як знайти новіші файли в каталозі, включаючи підкаталоги?


12

Я шукаю в Windows спосіб перерахувати всі файли в заданій директорії та її підкаталоги, відсортовані так, щоб новіші файли були зверху. Чи є якийсь простий спосіб зробити це? Я б також погодився на сценарій Perl.

Відповіді:


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>


Дякую. Я здогадуюсь, це повинно було бути питанням стартового потоку, якби воно йшло в цьому напрямку. :)
Кіп

1
декілька змін, які я вніс (для допомоги тому, хто трапився на це): my $dir = ($#ARGV >= 0 ? $ARGV[0] : '.');так що він сканує поточний dir, якщо параметр каталогу не вказаний, і включить час, який надрукується:print strftime('%Y-%m-%d %H:%M:%S', localtime((stat($key))[9])) . " $key\n";
Kip

1
@Kip, mtime слід зберігати, $files{$key}якщо ви хочете використовувати це для strftimeдруку, щоб уникнути повторного дзвінка stat(). Якщо ви плануєте передати його іншій програмі, я також змінив її для відображення повного шляху імен файлів. Ви можете схопити це тут: pastebin.ca/1797748
Джон T

дякую, ти швидший за мене. команда stat також працювала лише для файлів у поточному каталозі, оскільки ви зберігали лише останню частину імені файлу.
Кіп

7

Подобається це: dir /s /o:-d


1
хм ... не зовсім ідеально, це все ще перераховує кожен каталог окремо, але я можу працювати з ним
Kip

5

Якщо у вас встановлено cygwin або подібне, тоді find . -type f | xargs ls -trви зробите свою справу. Ви можете майже напевно зробити подібне з повноваженнями Microsoft.


3

У разі , якщо ви використовуєте Everything , просто введіть шлях і сортувати по даті зміни , і ви отримаєте всі файли в цій папці в тому порядку, незалежно підкаталог.

Все безкоштовно, доступна портативна версія.


1

Якщо ви не заперечуєте проти кодування (хоча це ставить питання про територію переповнення стека), у C # є класи Directoryта Fileкласи.

GetFilesМетод має перевантаження , яка буде повертати все імена файлів у всіх підкаталогах. Потім ви можете GetLastWriteTimeперейти до цього списку, закликаючи отримати змінену дату / час. Збережіть ім’я та час у словнику, відсортуйте за часом та роздрукуйте назви файлів.

Там також DirectoryInfoі FileInfoкласи.

Я мав би додати, що вся ця функціональність доступна через Powershell , тому у вас немає доступу до повного IDE.


Дякую. Я розробник, хоча в основному в Java. я запитував тут, сподіваючись, що варіант оболонки доступний
Кіп

@Kip - я зрозумів минулої ночі після того, як вийшов з системи, що повинен був згадати Powershell - technet.microsoft.com/en-us/scriptcenter/dd742419.aspx - це сценарій мови, але у вас є доступ до .NET часу виконання.
ChrisF

1

Якщо у вас встановлено щось на зразок Git Bash або Cygwin, вам слід мати можливість використовувати один з відповідей звідси: /programming/4561895/how-to-recursively-find-the-latest-modified -file-in-a-каталог

Який добре працював для мене: find . -type f -printf '%TF %TT %p\n' | sort -r

Ви також можете додати | head -10в кінці цього, щоб побачити лише 10 останніх, скажімо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.