ls를 사용하여 파일 이름의 일관된 순서를 보장하기 위해 어떤 명명 규칙을 사용할 수 있습니까?

ls를 사용하여 파일 이름의 일관된 순서를 보장하기 위해 어떤 명명 규칙을 사용할 수 있습니까?

특별한 옵션을 요구하지 않고 항상 일관된 순서로 정렬되도록 파일 집합에 대한 명명 규칙을 만들려고 노력하고 있지만 이를 달성하는 데 문제가 있습니다.

다음과 같은 파일 이름이 있는 경우: A.jpg, A1.jpg, A-1.jpg, , 옵션 없이 명령줄에서 실행 A_1.jpg하면 (맨 페이지에 "항목을 알파벳순으로 정렬"이라고 나와 있음) 다음 순서가 표시됩니다.ls

A-1.jpg, A_1.jpg, A1.jpg, A.jpg

"-", "_" 및 "1"은 ASCII 값 45, 95 및 49를 가지므로 이것이 실제로 어떻게 정렬되는지 명확하지 않으므로 확장자 이전의 모든 항목을 정렬한다고 가정하면 이는 올바른 순서가 아닙니다. 또한 "."이 포함되어 있으면 ASCII 값 46이므로 두 번째 문자 값은 45, 95, 49, 46이 됩니다.

확장자가 없으면(예 A: A1, , A-1) 다음 시퀀스 A_1가 ​​반환됩니다 .ls

A, A-1, A_1, A1

이 경우 두 번째 문자의 ASCII 값은 NULL, 45, 95, 48이며, 여기서반품순서가 없는 것 같은데, 확장자와 같은 순서도 빠져있습니다.

반면에 그놈 파일 관리자에서 디렉터리를 보면 다음 명령이 표시됩니다.

A.jpg, A1.jpg, A-1.jpg, A_1.jpg

이것은 또한 내가 얻은 출력입니다 ls -v. 매뉴얼 페이지에는 "텍스트에서 (버전) 번호의 자연 순서"라고 나와 있습니다. 이 경우 먼저 숫자 없이 정렬한 다음 순수 숫자로 정렬한 다음 숫자 앞에 접두사가 있는 ASCII 순서로 정렬하는 것 같습니다.

ls알파벳이 아닌 문자가 있을 때 실제로 항목을 "알파벳순"으로 정렬하는 방법을 이해할 수 있다면 큰 도움이 될 것이라고 생각합니다 . 간단한 테스트를 통해 예상했던 ASCII 값 순서가 분명하지 않으며 점과 확장이 전체에 어떻게 들어맞는지도 명확하지 않습니다. 뭐하는거야 ls? ? ?

업데이트: 표시된 순서대로 일부 파일 이름을 배치했으며 ls다음과 같은 16진수 ASCII 값을 지정했습니다.

A       0x41
A-1     0x41 0x2D
A_1     0x41 0x5F
A1      0x41 0x31
A-1.jpg 0x41 0x2D 0x31 0x2E 0x6A 0x70 0x67
A_1.jpg 0x41 0x5F 0x31 0x2E 0x6A 0x70 0x67
A1.jpg  0x41 0x31 0x2E 0x6A 0x70 0x67
AB      0x41 0x42
AB.jpg  0x41 0x42 0x2E 0x6A 0x70 0x67
A.jpg   0x41 0x2E 0x6A 0x70 0x67

업데이트 2: 의견에 대한 응답으로 출력은 다음과 같습니다 type -a ls.

ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
ls is /bin/ls

LC_COLLATE가 설정되지 않았습니다.

$ set | grep LC_COLLATE
$ echo $LC_COLLATE

$

답변1

ls 및 가변 길이/구분된 파일 이름으로 지적한 불확실성을 고려하면 영숫자 문자만 포함하는 고정 너비 형식을 사용하는 것이 합리적일 수 있습니다. 보유하려는 파일 수에 따라 여기에는 설명 이름 및 색인화를 위한 고정 너비 필드가 포함될 수 있습니다.

|이름 필드(10자리, 'x' 확장자) |인덱스 필드(6자리, '0' 확장자) |파일 확장자(3자리)|

예를 들어

xxxsealion000001.jpg
xxxxxxxcat000001.jpg
xxxxxxxcat009000.jpg

카테고리의 상대적 크기에 대해 더 많이 알지 못하면 더 잘할 수 없지만 위의 형식을 조정하여 더 많은 색인 공간이나 더 많은 설명 공간을 확보할 수 있습니다(또는 고정 너비를 더 길게 만들어 더 많은 색인 공간 또는 더 많은 설명 공간 확보). ). 긴 단어의 설명이 끝에 "0"으로 채워지도록 하려면("_"도 나에게 효과가 있었지만 내 대답의 첫 번째 부분과 반대임) 긴 단어가 먼저 "z"로 채워지도록 해야 합니다.

관련 정보