サブディレクトリを含むディレクトリで最新のファイルを見つける方法


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>


ありがとう。この方向に進んだ場合、これはstackoverflowの質問だったはずです。:)
キップ

1
私は(これに遭遇することが起こるだろうと、誰の助けのために)作られたいくつかの変更: my $dir = ($#ARGV >= 0 ? $ARGV[0] : '.');それは、ディレクトリのパラメータが与えられていない場合は、現在のディレクトリをスキャンし、印刷された時間を含めるように:print strftime('%Y-%m-%d %H:%M:%S', localtime((stat($key))[9])) . " $key\n";
キップ

1
@ Kip、2番目の呼び出しを回避する$files{$key}ためstrftimeに印刷時にmtime を使用する場合は、mtimeを保存する必要がありますstat()。別のプログラムにパイピングする予定がある場合は、ファイル名のフルパスを表示するように変更しました。ここでそれをつかむことができます:pastebin.ca/1797748
ジョンT

おかげで、あなたは私よりも速いです。ファイル名の最後の部分のみを保存していたため、statコマンドは現在のディレクトリ内のファイルに対しても機能していました。
キップ

7

このような: dir /s /o:-d


1
うーん...完全に理想的ではない、これはまだ各ディレクトリを個別にリストしますが、私はそれで作業できます
キップ

5

cygwinまたは同様のものがインストールされている場合find . -type f | xargs ls -trは、トリックを実行します。MicrosoftのPowerShellでもほぼ確実に同様のことができます。


3

あなたが使用している場合はすべてを、ただパスを入力し、ソートによって変更日、あなたは関係なく、サブディレクトリ、そのために、このフォルダ内のすべてのファイルを取得します。

すべてがフリーウェアであり、ポータブル版が利用可能です。


1

コーディングを気にしない場合(これはStack Overflow領域に問題を取りますが)、C#にはDirectoryFileクラスがあります。

このGetFilesメソッドには、すべてのサブディレクトリ内のすべてのファイル名を返すオーバーロードがあります。次に、このリストをループしてGetLastWriteTime、変更された日付/時刻を取得するために呼び出します。名前と時間を辞書に保存し、時間で並べ替えてファイル名を印刷します。

クラスもDirectoryInfoありFileInfoます。

この機能はすべてPowershellを介して利用できるため、完全なIDEにアクセスできないことを追加する必要がありました。


ありがとう。私は開発者ですが、主にJavaを使用しています。私はここでシェルオプションが利用できることを望んでいた
キップ

- @Kipは-私はPowerShellを言及している必要があることにログアウトした後、私は昨夜実現technet.microsoft.com/en-us/scriptcenter/dd742419.aspx -それは、スクリプト言語ですが、あなたは.NETランタイムへのアクセス権を持っています。
ChrisF

1

Git BashやCygwinのようなものがインストールされている場合、ここから回答のいずれかを使用できるはずです:https : //stackoverflow.com/questions/4561895/how-to-recursively-find-the-latest-modified -ディレクトリ内のファイル

私にとってうまくいったのは: find . -type f -printf '%TF %TT %p\n' | sort -r

また| head -10、その最後に追加して、最新の10個だけを表示することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.