作成されたタイムスタンプ(最も古いものから順に)でソートされたディレクトリ内の最初の100個のファイルを一覧表示する最良の方法は何でしょうか。ディレクトリは非常に大きいです(約100000ファイル)。
LSはにパイプヘッド完了するまでにひどい長い時間がかかります。
編集:
あなたは「頭にパイプでつながれたlsは完了するのに非常に長い時間がかかる」と言います。
これの原因はではなくls
、ディレクトリ内のファイルの数です。1つのディレクトリに100,000個のファイルがある場合、この問題を解決するには、ファイルの並べ替えや出力の印刷を検討する前に、100,000個のファイルすべてに関する情報を取得する必要があります。
時間がかかりすぎる場合、実際の解決策はファイルを複数のディレクトリに分割することです。
ファイルを複数のディレクトリに分散できない場合、検討するファイルの数を絞り込む方法はありますか?たとえば、ファイル名に日付が含まれている場合は、ワイルドカードを含めて、システムが100,000個のファイルを並べ替える必要がないようにすることができます。それとも、順番に番号が付けられているのでしょうか?(これは役立つ場合と役に立たない場合がありますが、試す価値があります。)
これを何回しようとしていますか?多分それは再利用のために出力を保存/キャッシュする価値があります。
さて、質問です。
あなたは必ず、あなたが「変更時間」「作成時間」を意味していませんか?ほとんどのツールは「変更時間」のみを表示でき、「作成時間」は表示できません。
「作成時間」を取得することは非常に新しいことであり、ext4ファイルシステムとインストールが簡単ではないいくつかのツールが必要です。
時間を変更したい場合
変更時間(略してctime)は、ファイルの属性が最後に変更された時間を意味します。
ls -c
ctimeでソートします。
降順ではなく昇順で出力する必要があるため、-r
オプションを使用して出力を逆にする必要もあります。
だからあなたはこのようにそれを行うことができます:
ls -cr | head -n 100
を使用した同じ問題のより長い解決策stat
:
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%Z\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
しかし、それはls -cr
私のシステムよりも遅くなります。
変更時間が必要な場合
変更時間(略してmtime)は、ファイルの内容が最後に変更された時間を意味します。
ls -t
mtimeでソートします。
変更ls -cr
へls -tr
(最良のオプション)または変更stat -c $'%Z\t%n'
しますstat -c $'%Y\t%n'
。
作成時間が必要な場合
(略してcrtime)
これは難しいです。
まず、ディレクトリがを使用してフォーマットされたファイルシステム上にあることを確認しext4
ます。tune2fs -l <device name>
これを確認するために使用できます。
次に、stat
と呼ばれる新しい形式%W
があります。これは、ここで役立ちます。入手するには、2010年10月以降にリリースされたバージョンのGNU Coreutilsをダウンロードし、解凍してコンパイルし、インストールする必要があります。
次に、カーネルによっては、これが機能する場合があります(試していません)。
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%W\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
参照:
についてエラーが発生した場合 "'$\t'
'$\t'
表記は必要ですbash
かzsh
:それはでは動作しませんdash
かsh
Ubuntuで。あなたが本当にこれらのシェルを使用する必要がある場合は、いずれかを変更する必要があります\t
にCtrl+ V、Tabおよびリードを削除する$
だけでオープニング引用符の前から。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加