sftp
を使用してファイル転送を行っています。 get -r folder
コマンドを使用して、プログラムがコンテンツをダウンロードする順序に驚いています。
ランダムにダウンロードする必要があるファイルを選択しているようです。私はこれが実際にそうであると信じることができません、そして私は裏側で何が起こっているのか自分自身に尋ねていますか?
内容が含まれているフォルダをダウンロードするときにsftp
がたどる順序は?
これまでのところ、名前でもサイズでもありません。
ls
コマンドを使用してディレクトリの内容を一覧表示すると、デフォルトでは現在のロケールの並べ替え規則に従って、一覧が英数字順に並べ替えられます。これがファイルシステム内の「自然な順序」であると簡単に想定できますが、これは正しくありません。
ほとんどのファイルシステムは、ディレクトリをどのようにもソートしません。新しいファイルをディレクトリに追加すると、新しいファイルは基本的に、ディレクトリのメタデータ構造の最初の空きスロットを取得します。ソートは、ディレクトリリストをユーザーに表示するときにのみ行われます。単一のディレクトリに数十万または数百万のファイルが含まれている場合、この並べ替えでは、メモリと処理能力が非常に大きくなる可能性があります。
ファイルが処理される順序が重要でない場合、最も効率的な方法は、ディレクトリメタデータを順番に読み取って、明示的な並べ替えを行わずに発生した順序でファイルを処理することです。ほとんどの場合、これは、ファイルが基本的にディレクトリに追加された順序で処理され、古いファイルが削除され、後で追加されたファイルがメタデータスロットを再生した場合に、新しいファイルが点在することを意味します。
一部のファイルシステムは、内部構造でツリー構造またはその他のものを使用する場合があり、副作用としてディレクトリエントリの特定の順序を強制する場合があります。ただし、このような順序付けは、ファイルのiノード番号やその他のファイルシステム内部の詳細に基づいている可能性があるため、実際の目的で人間が使用できるとは限りません。
@ A.Bが言ったように 質問のコメント内 、find
コマンドまたはls -f
またはls --sort=none
は、ファイルシステムがディレクトリを格納する順序に関係なく、明示的な並べ替えなしでファイルをリストします。