Estou fazendo uma transferência de arquivos usando sftp
. Usando o get -r folder
comando, fico surpreso com a ordem em que o programa está baixando o conteúdo.
Parece que estaria selecionando os arquivos que precisa baixar aleatoriamente. Eu não posso acreditar que este é realmente o caso e estou me perguntando o que está acontecendo nos bastidores?
Qual é a ordem que sftp
se segue ao baixar uma pasta com seu conteúdo?
Pelo que pude ver até agora, não é por nome nem por tamanho.
Quando você lista o conteúdo do diretório com o
ls
comando, ele classificará a listagem em ordem alfanumérica de acordo com as regras de classificação da localidade atual por padrão. É fácil supor que esta é a "ordem natural" das coisas dentro do sistema de arquivos - mas isso não é verdade.A maioria dos sistemas de arquivos não classifica seus diretórios de forma alguma: ao adicionar um novo arquivo a um diretório, o novo arquivo basicamente obtém o primeiro slot livre na estrutura de metadados do diretório. A classificação só é feita ao exibir a listagem de diretórios para o usuário. Se um único diretório tiver centenas de milhares ou milhões de arquivos, essa classificação pode realmente exigir quantidades não triviais de memória e poder de processamento.
Quando a ordem em que os arquivos são processados não importa, a maneira mais eficiente é apenas ler os metadados do diretório em ordem e processar os arquivos na ordem encontrada sem qualquer classificação explícita. Na maioria dos casos, isso significa que os arquivos serão processados basicamente na ordem em que foram adicionados ao diretório, intercalados com arquivos mais recentes nos casos em que um arquivo antigo foi excluído e um arquivo adicionado posteriormente recuperou seu slot de metadados.
Alguns sistemas de arquivos podem usar estruturas de árvore ou qualquer outra coisa em seu design interno que possa impor uma ordem específica para suas entradas de diretório como um efeito colateral. Mas tal ordenação pode ser baseada em números de inode dos arquivos ou algum outro detalhe interno do sistema de arquivos e, portanto, não seria garantido que seja útil para humanos para qualquer propósito prático.
Como @AB disse nos comentários da pergunta , um
find
comando ou umls -f
ou listarials --sort=none
os arquivos sem qualquer classificação explícita, em qualquer ordem em que o sistema de arquivos armazena seus diretórios.