Qual é a definição de um prefixo, número de versão e sufixo em um nome de arquivo para classificação de versão?

0

No manual para coreutils,

10.1.4 Details about version sort,

Version sorting handles the fact that file names frequently include indices or version numbers. Standard sorting usually does not produce the order that one expects because comparisons are made on a character-by-character basis. Version sorting is especially useful when browsing directories that contain many fi les with indices/version numbers in their names:

$ ls -1       $ ls -1v
abc.zml-1.gz  abc.zml-1.gz
abc.zml-12.gz abc.zml-2.gz
abc.zml-2.gz  abc.zml-12.gz

Version-sorted strings are compared such that if ver1 and ver2 are version numbers and prefix and suffix (suffix matching the regular expression ‘(\.[A-Za-z~][A-Za-z0-9~]*)*’) are strings then ver1 < ver2 implies that the name composed of prefix ver1 suffix sorts before prefix ver2 suffix.

Note also that leading zeros of numeric parts are ignored:

$ ls -1        $ ls -1v
abc-1.007.tgz  abc-1.01a.tgz
abc-1.012b.tgz abc-1.007.tgz
abc-1.01a.tgz  abc-1.012b.tgz

This functionality is implemented using gnulib’s filevercmp function, which has some caveats worth noting.

LC_COLLATE is ignored, which means ls -v and sort -V will sort non-numeric prefixes as if the LC_COLLATE locale category was set to C.

• Some suffixes will not be matched by the regular expression mentioned above. Consequently these examples may not sort as you expect:

abc-1.2.3.4.7z
abc-1.2.3.7z
abc-1.2.3.4.x86_64.rpm
abc-1.2.3.x86_64.rpm
  1. Dado um nome de arquivo, quais são as definições de um prefixo, versão número e sufixo?
  2. Para um sufixo, na expressão regular ‘(\.[A-Za-z~][A-Za-z0-9~]*)*’ ,

    • o que significa ~ ?
    • é parte da expressão regular?

    A sintaxe das expressões regulares é introduzida em algum lugar?

  3. Nos três exemplos, quais são os prefixos, números de versão e sufixos dos nomes de arquivos?

  4. No último exemplo, aquele na última ressalva, por que os nomes de arquivos são classificados dessa maneira pela classificação de versões?

Obrigado.

    
por Tim 05.12.2016 / 23:35

1 resposta

2

Concedido, é mal explicado.

A edificação final só pode ser obtida lendo o código-fonte: link . Basicamente:

O sufixo é a string mais longa que corresponde a (\.[A-Za-z~][A-Za-z0-9~]*)*$ . Observe o $ , que requer que a correspondência esteja no final do nome do arquivo. Partes separadas por pontos do sufixo são tratadas como números de versão para fins de comparação.

O ~ é apenas um caractere que pode aparecer em um nome de arquivo. Isso às vezes é usado em números de versão como 3.4.1~alpha .

In the last example, the one in the last caveat, why are the filenames sorted that way by version sorting?

Como _ não é um caractere de sufixo permitido, os arquivos que terminam em x86_64.rpm são tratados como sem versão (ou apenas rpm considerado como uma versão). Não está claro por que eles não são classificados na ordem do dicionário como um substituto.

    
por 05.12.2016 / 23:58