“ls”가 먼저 도트 파일을 표시하도록하려면 어떻게해야합니까?


46

어딘가에 내가 ls 명령을 망 쳤고 이제는 실행할 때이 순서를 얻습니다.

$ ls -AhHl --color=auto
-rwxr-xr-x 1 clang clang  640 Mar  1 02:46 apple-touch-icon-precomposed.png
-rwxr-xr-x 1 clang clang  784 Jul 12 02:54 crossdomain.xml
-rwxr-xr-x 1 clang clang 1.2K Mar  1 02:46 favicon.ico
drwxr-xr-x 8 clang clang 4.0K Jul 12 23:50 .git
-rw-r--r-- 1 clang clang   17 Feb 29 19:48 .gitignore
-rwxr-xr-x 1 clang clang 1.4K Jul 12 02:54 humans.txt

ls가 점 파일을 무시하고 대신 첫 글자 순서로 무엇을 했습니까?

출력 locale:

$ locale
LANG=
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

답변:


47

추가해보십시오

export LC_COLLATE="C"

도트 파일에서 또는 LC_ALL할당을 다음 과 같이 변경하십시오 .

export LC_ALL="C"

이것은 문자 수준에서 정렬하는 방법을 제어합니다. 기본적으로 도트 파일을 인라인으로 정렬하는 것이지만, sort도트 파일을 먼저 목록으로 만듭니다 .

그러나 기본적으로 모든 로케일 인식 유틸리티에서 실제 로케일에 대한 지원이 중지됩니다.


더 나아가서 GNU Coreutils 매뉴얼 (강조 광산)을 인용하면 :

가 아닌 POSIX 로케일을 사용하는 경우 (예를 들어, 설정 LC_ALLen_US), 다음 종류의 다른 정렬되어 출력을 생성 할 수 있습니다 당신이에 익숙하고보다가.

이 경우 LC_ALL환경 변수를로 설정하십시오 C. 설정 LC_COLLATE에는 두 가지 문제 만 있습니다. 먼저 LC_ALL설정되어 있으면 효과가 없습니다 . 둘째, LC_CTYPE(또는 설정되지 않은 LANG경우 LC_CTYPE)가 호환되지 않는 값으로 설정된 경우 정의되지 않은 동작이 있습니다. 예를 들어 LC_CTYPEis ja_JP.PCKbut LC_COLLATEis 인 경우 정의되지 않은 동작 이 발생 en_US.UTF-8합니다.


2
LC_ALL = "C"를 설정하면 트릭이되었습니다! 빠른 답변 주셔서 감사합니다
clang1234

7
LC_ALL = "C"를 설정하면 ls외국어 (예 : 일본어) 유니 코드 파일 이름이 다음과 같이됩니다.????????
ohho

export LC_ALL="C"도트 파일을 추가 하면 모든 로케일 인식 유틸리티에서 실제 로케일에 대한 지원이 효과적으로 상실됩니다. 그동안 인쇄 @ohho 점을 알아가 함께 해결 될 수 있다는 문제 Faroul의 대답 , 당신은 소개하겠습니다 정렬 문제 : 바이트 값은, 그 정렬의 결과 것은 (가) 예기치 않게 의해 일어날 정렬 대소 문자 구분 (b)는 변함없이 장소, 악센트 문자 모든 액센트가없는 것들 이후 .
mklement0

35

실제 필요없이 시스템 전체의 변경을 피하려면 ls다음에 별칭을 추가하여 현재 사용자의 작동 방식 만 변경할 수 있습니다 .bashrc.

alias ll='LC_COLLATE=C ls -alF'

이렇게하면 먼저 도트 파일이 정렬되고 키릴 문자와 같은 "흔하지 않은"문자 집합을 올바르게 처리 (표시 및 정렬) 할 수 있습니다. 정렬이 대소 문자를 구분하는 유일한 원인입니다.

출처 : http://ubuntuforums.org/showthread.php?t=816753


3
이것은 여기까지의 가장 좋은 답변입니다
Engineer Dollery

아름다운. 시스템 전체 구성을 변경하는 것보다 훨씬 낫습니다 (일부 파이썬 모듈에서 문제를 일으킬 수 있음).
Gui Ambros

1
이것은 가장 유용한 답변이었습니다. 또한 목록 LC_ALL의 맨 위에 정렬 / 호이 스팅 도트 파일과 호환되지 않는 것으로 이미 설정된 환경에서는을 (를 ) 재정의하지 않으므로 대신 ls사용하십시오 . alias ll='LC_ALL=C ls -alF'LC_COLLATELC_ALL
matty

8

환경

LC_ALL="C.UTF-8"

umlauts 및 "ls -la"는 도트 파일을 먼저 나열합니다.


3
도트 파일이 먼저 나열되지만 이제 대문자로 시작하는 파일 이름이 소문자로 시작하는 파일 이름보다 먼저 나열됩니다.
Chnossos

1
+1은 허용되는 답변보다 가까이 오지만 제한 사항을 요약합니다. 정렬은 대 / 소문자를 구분 하고 외국 문자는 현재 올바르게 인쇄 되지만 올바르게 정렬UTF-8 되지 않습니다 .
mklement0

3
C.UTF-8은 잘못된 로케일이므로 로케일은로 돌아갑니다 C. 여전히 UTF-8 지원이 손실됩니다. 사실, 대부분의 프로그램은 LC_ALL=C대부분의 멀티 바이트 문자를 올바르게 표시 하지만 LC_ALL=something_invalid일부 프로그램에서는 (`ls와 같이) 그렇지 않기 때문에 훨씬 더 나쁩니다 .
Martin Tournoij 2016 년

@MartinTournoij 그러나 Stéphane Chazelas가 GNU 시스템 (따라서 데비안과 리눅스)에 대해 달리 말하면 맞습니까?
muru

@muru 잘 모르겠습니다. 스테판에게 물어봐야 할 것 같아요? 내가 아는 전부는 gist.github.com/Carpetsmoker/ef09b3734b29372939f97107413d7733locale 으로 오류가 발생 하는 것 같습니다 LC_ALL=C.UTF-8. 그것은 아치 리눅스에 있습니다.
Martin Tournoij

3

ls (1) 맨 페이지에는 다음이 나열되어 있습니다.

-v 텍스트 내 자연 정렬 (버전) 숫자

이것은 마침표를 정렬하는 방법을 변경하고 그룹 도트 파일을 먼저 그룹화합니다. 나는 가지고있다:

alias ls='ls -vAF'
alias ll='ls -l'

내 ~ / .bashrc에.


1

벽에서 벗어난 아이디어

면책 조항 : 이것은 대부분의 사람들에게 과잉이 될 것입니다. 하지만 1995 년부터이 일을 해왔고 세상을 내가 원하는대로 정확하게 만들 수있는 기술이 있습니다. 왜 안되 겠어요?

나는 ls특히 다른 수정 방법을 사용 -rt하는 것을 특히 좋아합니다 ( 특히 r수정 된 time로 정렬 ). 그래서 나는 미친 것을 시도하고 정렬을 위해 awk를 사용하기로 결정했습니다.

# save as ~/.ls.awk
# inpsired by http://superuser.com/questions/448291/how-can-i-make-ls-show-dotfiles-first

{
    if($1 == "total"){
        print $0
        next
    }
    # may need to adjust $9 to match your name column
    if(match($9, /^(\033\[[0-9]*m)*\./)) # optionally look past xterm highlighting like: ^[[34m
        df[++dd] = $0
    else
        nf[++nn] = $0
}
END{
    while (++d in df)
        print df[d]
    while (++n in nf)
        print nf[n]
}

이제 bash 별칭을 정의하는 대신 bash 함수를 정의합니다 (별칭은 끝에 인수 만 추가 할 수 있지만 함수는 어디서나 사용할 수 있기 때문에)

ll(){ CLICOLOR_FORCE=1 ls -lhA $* | awk -f ~/.ls.awk; }

결과를 보려면

샘플 파일을 만들어 봅시다 :

for n in 4 .4 3 .3 2 .2 1 .1; do touch $n; sleep 1; done

일반 LS 사용

$ ls -lA
total 8
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .1
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff  285 Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 1
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 4
$ ls -lArt

total 8
-rwxr-xr-x  1 bbronosky  staff  285 Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 4
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 3
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .3
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 2
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .2
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 1
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .1

awk로 필터링하는 내 기능 사용

$ ll
total 8
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .1
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff   285B Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 1
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 4

$ ll -rt
total 8
-rwxr-xr-x  1 bbronosky  staff   285B Nov 29 13:14 .ls.awk
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .4
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .1
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 4
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 1

https://github.com/RichardBronosky/dotfiles/commit/6170c0a9에서 내 구현을 볼 수 있습니다.

이것에 대해 가장 중요한 것은 ls출력 을 조정하기위한 프레임 워크라는 것입니다 . 해당 awk 필터로 원하는 모든 것을 할 수 있습니다. 디렉토리, 도트 파일, 그 밖의 모든 것을 원할 수 있습니다. xterm 색상을 처리하는 방법을 알고 나면 그렇게 어렵지 않습니다. 그것은 전적으로 당신에게 달려 있습니다.


-1

.bashrc 또는 / etc / bashrc 파일에서 이것을 시도 할 수 있습니다 :

LS_OPTIONS='--color=tty -A -F -X -B -h -v -b -T 0 --group-directories-first';
export LS_OPTIONS;
alias ls='/bin/ls $LS_OPTIONS';

이것은 "--group-directories-first"를 옵션으로하는 다소 새로운 버전의 ls를 실행한다고 가정합니다. LS 옵션을 원하는대로 조정할 수 있습니다.


--group-directories-first“도트 파일 먼저 표시”와 어떤 관련이 있습니까?
G-남자 '는 분석 재개 모니카'말한다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.