私はsftp
そのget -r folder
コマンドを使用していますが、プログラムがダウンロードする順序に驚きました。
ダウンロードするファイルをランダムに選択するようです。私はこれが実際に本当であることを信じることができず、後で何が起こっているのか私に尋ねました。
sftp
フォルダとそのコンテンツをダウンロードするときの順序は何ですか?
これまで私が知っている限り、名前でもサイズもありません。
答え1
このコマンドを使用してディレクトリの内容を一覧表示すると、デフォルトではls
現在のロケールの組み合わせに従ってリストが英数字でソートされます。これはファイルシステムの「自然な順序」だと思うのは簡単ですが、実際にはそうではありません。
ほとんどのファイルシステムは何らかの方法でディレクトリの順序を指定しません。新しいファイルがディレクトリに追加されると、新しいファイルはデフォルトでディレクトリのメタデータ構造から最初の空きスロットを取得します。ソートは、ディレクトリリストがユーザーに表示された場合にのみ実行されます。単一のディレクトリに数十万または数百万のファイルがある場合、このソートには実際に多くのメモリと処理能力が必要です。
ファイル処理の順序が重要でない場合は、明示的な順序なしでディレクトリメタデータを順番に読み取り、見つかった順序でファイルを処理するのが最も効率的です。ほとんどの場合、これはデフォルトでファイルがディレクトリに追加された順序で処理されることを意味します。最新のファイルが散在しており、古いファイルは削除され、後で追加されたファイルはメタデータスロットを回復します。
一部のファイルシステムでは、内部デザインでツリーやその他の構造を使用することがあり、これによりディレクトリエントリが特定の順序に従うように副作用を引き起こす可能性があります。しかし、これらの順序はファイルのinode番号や他のファイルシステム内部の詳細に基づいている可能性があるため、人にとって実際に役立つという保証はありません。
@ABが言ったように問題のコメント、find
コマンド、ls -f
またはls --sort=none
コマンドは、ファイルシステムがそのディレクトリを保存する順序に関係なく、明示的なソートなしでファイルを一覧表示します。