나는 sftp
그 get -r folder
명령을 사용하고 있는데, 프로그램이 다운로드하는 순서에 놀랐다.
다운로드할 파일을 무작위로 선택하는 것 같습니다. 나는 이것이 실제로 사실이라는 것을 믿을 수 없었고 뒤에서 무슨 일이 일어나고 있는지 스스로에게 물었습니다.
sftp
폴더와 해당 콘텐츠를 다운로드할 때 따르는 순서는 무엇입니까?
지금까지 내가 아는 한 이름도 아니고 크기도 아닙니다.
답변1
이 명령을 사용하여 디렉토리의 내용을 나열하면 ls
기본적으로 현재 로케일의 조합에 따라 목록이 영숫자순으로 정렬됩니다. 이것이 파일 시스템의 "자연스러운 순서"라고 생각하기 쉽지만 사실은 그렇지 않습니다.
대부분의 파일 시스템은 어떤 방식으로든 디렉터리 순서를 지정하지 않습니다. 새 파일이 디렉터리에 추가되면 새 파일은 기본적으로 디렉터리의 메타데이터 구조에서 첫 번째 여유 슬롯을 가져옵니다. 정렬은 디렉토리 목록이 사용자에게 표시될 때만 수행됩니다. 단일 디렉터리에 수십만 또는 수백만 개의 파일이 있는 경우 이 정렬에는 실제로 많은 메모리와 처리 능력이 필요합니다.
파일 처리 순서가 중요하지 않은 경우 명시적인 순서 없이 디렉터리 메타데이터를 순차적으로 읽고 발견된 순서대로 파일을 처리하는 것이 가장 효율적입니다. 대부분의 경우 이는 기본적으로 파일이 디렉토리에 추가된 순서대로 처리된다는 것을 의미합니다. 최신 파일이 산재해 있고 이전 파일은 제거되고 나중에 추가된 파일은 메타데이터 슬롯을 회수합니다.
일부 파일 시스템은 내부 디자인에서 트리 또는 기타 구조를 사용할 수 있으며 이로 인해 부작용으로 디렉토리 항목이 특정 순서를 따르도록 할 수 있습니다. 그러나 이러한 순서는 파일의 inode 번호나 기타 파일 시스템 내부 세부 정보를 기반으로 할 수 있으므로 사람에게 실제로 유용하다는 보장은 없습니다.
@AB가 말했듯이문제의 댓글, find
명령 ls -f
또는 ls --sort=none
명령은 파일 시스템이 해당 디렉토리를 저장하는 순서에 관계없이 명시적인 정렬 없이 파일을 나열합니다.