Linux에서 파일 이름 시작 부분에 사용하여 일반 정렬 순서에서 맨 위로 이동할 수 있지만 이스케이프 등을 할 필요 없이 사용할 수 있는 문자가 있습니까?

Linux에서 파일 이름 시작 부분에 사용하여 일반 정렬 순서에서 맨 위로 이동할 수 있지만 이스케이프 등을 할 필요 없이 사용할 수 있는 문자가 있습니까?

Linux 파일 이름 등에 사용해서는 안되는 문자를 설명하는 많은 질문/답변이 있습니다.

명령줄에서 처리하기 위해 이스케이프 문자가 필요 없이 파일 이름 앞에 ls의 맨 위로 올릴 수 있는 영숫자가 아닌 문자를 찾고 있습니다.

macOS에서는 GUI 정렬을 위해 <Filename>을 사용하지만 <는 명령줄에서 제대로 작동하지 않으며 물론 적절하게 이스케이프해야 합니다. 마찬가지로 -Filename-은 명령줄에서 제대로 작동하지 않습니다.

(대부분의) 쉘에 특별한 의미가 없는 모든 영숫자 문자 앞에 특수 문자가 있습니까?

아니면 이전에 정렬된 모든 문자가 사용됩니까? :-( :-)

고마워요, 애쉴리.

추신: 111-이 사용되는 것을 본 적이 있지만 그것은 나에게 적합하지 않습니다...

답변1

당신이 그것을 알기도 전에, 당신은 두 가지 매우 복잡한 질문, 즉 인용과 순서를 묻고 있습니다.

정렬 순서는 로캘 설정에 따라 결정됩니다. 첫 번째는...고정되지 않았습니다.

예를 들어

$ touch Hello hello There there
$ LANG=C ls -1
Hello
There
hello
there
$ LANG=en_US ls -1
hello
Hello
there
There

다음은 인용 문제이다. 이것은 쉘에 매우 의존적입니다. 따라서 내 표준 쉘(ksh99)에서는 이것은 !좋은 문자입니다. 그러나 이것은 실패했다 bash.

$ ls
!README  0  1  2  a  b  c
$ cat !README
hello
$ bash
bash-4.2$ cat !README
bash: !README: event not found

ASCII 시퀀스로 작업하는 경우 첫 번째 "유용한" 문자는 +. ksh/bash/zsh/csh에서는 특수 문자가 아닌 것 같습니다.

그러나 인용은 쉘에 따라 다르므로그리고일부 명령은 a를 +인수로 사용할 수 있지만(역사적으로 head그랬습니다) 확실히 알 수는 없습니다.

물론 LANG 설정은 재정의될 수 있습니다(따라서 +첫 번째 설정은 아닙니다!).

% LANG=en_US ls -1
0
1
2
a
b
c
+hello

그러니까, 일반적으로 말하면... 반드시 먼저 나올 특정 캐릭터는 없습니다.

답변2

정렬 순서는 ls명령줄 옵션과 언어 설정에 따라 다릅니다. LANG 변수가 자연어로 설정된 경우 %, _, -, + 또는 :(Bash에서 이스케이프할 필요가 없는 문자)와 같은 특수 문자는 무시될 가능성이 높습니다. 어쨌든 LANG=en_US.UTF-8의 경우입니다.

그러나 LANG이 C로 설정되면 파일 이름은 해당 문자의 ASCII 값에 따라 정렬된 것처럼 나타나며 실제로 위의 특수 문자를 사용하여 출력에서 ​​파일 위치를 "올릴" 수 있습니다 ls. 예:

$ LANG=C ls
%myfile
+myfile
-myfile
:myfile
_myfile
clr-debug-pipe-440205-1575025808-in
clr-debug-pipe-440205-1575025808-out
...
$ LANG=en_US.UTF-8 ls
clr-debug-pipe-440205-1575025808-in
clr-debug-pipe-440205-1575025808-out
dotnet-diagnostic-440205-1575025808-socket
f.py
%myfile
+myfile
-myfile
:myfile
_myfile
...

타임스탬프, 소유권 등을 기준으로 정렬하기 위한 명령줄 옵션이 있다는 것을 잊지 마세요.

관련 정보