次の「ls」にファイルをすぐに一覧表示させるスクリプトのコマンドは何ですか?

次の「ls」にファイルをすぐに一覧表示させるスクリプトのコマンドは何ですか?

一般化する

ls端末の次のコマンドが10秒を待たずにディレクトリ内のファイルをすぐに一覧表示するように、bashスクリプトでどのコマンドを実行できますか?

「追加情報」の最後にある質問1と質問2を参照してください。

詳細

私のディレクトリには、100 MBから1 GBのサイズの700のビデオファイル(mp4)があります。平均ファイルサイズは200MBです。

起動後に初めてファイルを一覧表示する場合(ターミナルでlsを使用するか、pcmanfmを使用して)、ファイルの一覧表示には10秒かかります。後でファイルを再リストすると(lsまたはpcmanfmを使用)、ファイルはほぼ直ちにリストされます。

したがって、この初期待ち時間をバイパスするために、起動後にスクリプトで次のコマンドを実行しました。

ls /path/to/vid-directory

...lsまたはpcmanfmを使用してディレクトリを一覧表示すると、ファイルはすぐに一覧表示されます。

しかし、奇妙に走る

ls /path/to/vid-directory

SCRIPT の NEXT は、ls または pcmanfm がファイルを直ちにリストしないようにします (10 秒後にリスト)。また、奇妙なことは、初期スクリプトが実行されたときにファイルがほぼすぐにリストされることです。

したがって、端末でlsを実行するとRAMキャッシュにファイル名が格納されるように見えますが、スクリプトでlsを実行するとそうではありません*。

質問1:なぜ後者*が発生するのですか?

質問2:次のlsまたはpcmanfmがすぐにファイルを一覧表示できるようにするには、スクリプトでどのコマンドを実行する必要がありますか?

PS:テストするときは、以下を実行してRAMが最初に空であることを確認しました。

sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

ベストアンサー1

ls端末とスクリプトlsの間の唯一の違いは、エイリアスを使用してlsファイル名のリストだけでなく、ファイルのプロパティも読み取る必要があるオプションを渡すことです。オプションはおそらくです--color。ファイル名のリストを読み取るにはディレクトリ自体からのみ読み取る必要がありますが、ファイル属性を読み取るには(lstatシステムコールを介して)各ファイルのinodeにアクセスする必要があります。したがって、スクリプトを実行すると、そのls属性ではなくファイル名のみがキャッシュに残ります。プロパティは、端末で初めてls実行するとき、またはGUIファイルマネージャを使用するときにロードする必要があります。

ls端末が使用するスクリプトに同じオプションを渡します。

10秒以内に700個のファイルをリストするのはとても遅いです。ファイルサイズは重要ではありません。一般的な最新のシステムは、数万または数十万のファイルを処理するときにのみ顕著に遅くなり始めます。

おすすめ記事