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