답변:
다음 명령은 디렉토리를 먼저 나열하고 일반 파일을 둘째로 나열하며 링크는 세 번째로 나열합니다.
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"
또한 키 입력을 저장하기 위해이 명령에 대한 별명 을 작성하는 것이 좋습니다 .
편집하다:
디렉토리를 먼저 원한 다음 디렉토리가 아닌 모든 것을 원한다면 다음을 사용하십시오.
ls -la | grep "^d" && ls -la | grep -v "^d"
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep -v -E "^d|^-|^total"
않겠습니까?
alias la="ls -la | grep \"^d\" && ls -la | grep \"^-\" && ls -la | grep -E \"^d|^-\" -v | grep -v \"^total\""
ls -la|grep ^d;ls -la|grep -v ^d
(따옴표는 필요하지 않으며로 대체 &&
되었습니다 ;
). 또 다른 옵션은 변수를 도입 한 다음 평가하는 것 a="ls -la|grep ^d";eval $a;eval $a -v
입니다. ls
/에 더 많은 옵션이 지정되어있을 때 반복을 피하는 데 유용 할 수 있습니다 grep
. 그 ls -la --group-directories-first
옵션 도 있지만, 가장 짧은 imo는ls -la|sort
나는 * nix를 좋아하고 이러한 답글 중 일부에 들어가는 독창성을 보는 것을 좋아합니다 ...
광산은 GNU Linux에서 그리 멋지지 않습니다.
alias ls='ls --color -h --group-directories-first'
Linux CLI 앱에 더 익숙하다면 OSX에서 coreutils도 업데이트하는 경향이 있습니다.
brew install coreutils
alias ls='/usr/local/bin/gls --color -h --group-directories-first'
brew install bash
, 이것이 작동합니다! :)
Mac 사용자의 경우 coreutils :
brew install coreutils
alias ls='ls --color -h --group-directories-first'
시스템이 홈브류 로 준비되었다고 가정합니다 .
gls
차라리. 권리?
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
.
디렉토리 목록에보고 싶은 것이 있지만 지금까지 답변이 아래의 모든 요구 사항을 충족시키는 것은 아닙니다. 디렉토리 목록에 대한 나의 요구 사항 :
./
및 제외 ../
), 파일 및 링크가 포함됩니다.--group-directories-first
합니다. Windows 용 Git Bash에서 작동하지 않는 등의 편리한 옵션을 사용하는 것이 가장 어려웠습니다.많은 해킹 후 마침내 만족스러운 한 줄짜리 라이너 (긴 줄이지 만 ;-)가 나타났습니다. 이것을 'dir'이라는 별칭에 할당했습니다.
ls -dlF --color * .* | head -n2 && ls -AlF | LC_ALL=C grep "^d" |
LC_ALL=C sort -k 9df && ls -AlF | LC_ALL=C grep "^[l-]" |
LC_ALL=C sort -k 9df && echo -e `find -maxdepth 1 -type d ! -name . |
wc -l` Dir\(s\) `du -hs | cut -f 1`\\t\\t`find -maxdepth 1 -type f |
wc -l` File\(s\) `find -maxdepth 1 -type f -print0 | du -ch --files0-from=- |
tail -n 1 | cut -f 1`\\t\\t`find -maxdepth 1 -type l | wc -l` Link\(s\)
일을 더 쉽게 관리하기 위해 디렉토리 목록의 각 세그먼트를 원하는대로 출력하는 별도의 명령을 내린 다음 &&
연산자를 사용하여 함께 정리했습니다 .
ls -dlF --color * .* | head -n2
-추출 ./
및 ../
. 우리는 sort
그것들이 이미 올바른 순서이기 때문에 이것을 통과하고 싶지 않으며 , 그것들을 정렬하면 ../
먼저 나열 될 수 있습니다 . -d
옵션은 "전체"라인을 제거하는 것입니다; -F
디렉토리에 슬래시를 표시 하기 위해 추가 하고 싶습니다 (일반적인 작업을 수행 할 때 심볼릭 링크를 "@"로 표시 함 ls -F
).
ls -AlF | LC_ALL=C grep "^d" | LC_ALL=C sort -k 9df
-디렉토리를 추출하고 파일 이름 (9 번째 열)을 기준으로 정렬합니다 (알파 / 스페이스가 아닌 문자 ( d
옵션)와 문자 대소 문자 ( 옵션) 모두 무시 f
). ls -A
옵션 제외는 ./
하고 ../
목록에서 우리는 이미 이전 단계에서이를 추출하기 때문이다. 로케일 재설정으로 모든 grep
및 sort
명령 을 접두어로 사용하는 경향이 LC_ALL=C
있습니다. 다루다.
ls -AlF | LC_ALL=C grep "^[l-]" | LC_ALL=C sort -k 9df
-이것은 위의 단계와 비슷하지만 이번에는 파일과 심볼릭 링크를 정렬합니다.
find -maxdepth 1 -type d ! -name . | wc -l
- 디렉토리의 수를 가져 제외 ./
하고 ../
.
find -maxdepth 1 -type f | wc -l
-파일 수를 얻습니다.
find -maxdepth 1 -type l | wc -l
-심볼릭 링크 수를 얻습니다.
du -hs | cut -f 1
-모든 하위 디렉토리의 전체 크기를 사람이 읽을 수있는 형식으로 추출하십시오.
find -maxdepth 1 -type f -print0 | du -ch --files0-from=- | tail -n 1 | cut -f 1
-사람이 읽을 수있는 형식으로 모든 파일의 전체 크기를 추출합니다.
새로운 dir
별칭이 실제로 사용되는 것을 보자 !
전에:
$ ls -alF
total 22
drwxr-xr-x 13 Tom Administ 4096 Oct 25 02:38 ./
drwxr-xr-x 3 Tom Administ 0 Dec 24 2014 ../
drwxr-xr-x 15 Tom Administ 4096 Sep 17 01:23 .VirtualBox/
-rw-r--r-- 1 Tom Administ 615 Oct 25 02:38 .aliases
-rw-r--r-- 1 Tom Administ 12742 Oct 24 11:47 .bash_history
-rw-r--r-- 1 Tom Administ 3234 Oct 24 15:06 .bash_profile
drwxr-xr-x 1 Tom Administ 0 Jan 24 2015 .gem/
-rw-r--r-- 1 Tom Administ 586 Oct 24 03:53 .gitconfig
drwxr-xr-x 1 Tom Administ 4096 Dec 28 2014 .ssh/
drwxr-xr-x 4 Tom Administ 0 Jan 24 2015 .travis/
-rw-r--r-- 1 Tom Administ 6645 Oct 25 02:38 _viminfo
-rw-r--r-- 1 Tom Administ 4907 Oct 24 15:16 profile
drwxr-xr-x 1 Tom Administ 0 Oct 24 22:20 tmp/
후:
$ dir
drwxr-xr-x 13 Tom Administ 4096 Oct 25 02:38 ./
drwxr-xr-x 3 Tom Administ 0 Dec 24 2014 ../
drwxr-xr-x 1 Tom Administ 0 Jan 24 2015 .gem/
drwxr-xr-x 1 Tom Administ 4096 Dec 28 2014 .ssh/
drwxr-xr-x 1 Tom Administ 0 Oct 24 22:20 tmp/
drwxr-xr-x 4 Tom Administ 0 Jan 24 2015 .travis/
drwxr-xr-x 15 Tom Administ 4096 Sep 17 01:23 .VirtualBox/
-rw-r--r-- 1 Tom Administ 615 Oct 25 02:38 .aliases
-rw-r--r-- 1 Tom Administ 12742 Oct 24 11:47 .bash_history
-rw-r--r-- 1 Tom Administ 3234 Oct 24 15:06 .bash_profile
-rw-r--r-- 1 Tom Administ 586 Oct 24 03:53 .gitconfig
-rw-r--r-- 1 Tom Administ 4907 Oct 24 15:16 profile
-rw-r--r-- 1 Tom Administ 6645 Oct 25 02:38 _viminfo
5 Dir(s) 2.8M 6 File(s) 31K 0 Link(s)
한 가지 사소한 단점은 파일 이름을 둘러싼 색상 제어 문자가 정렬을 너무 신뢰할 수 없기 때문에 색상 목록을 가질 수 없다는 것입니다.
최신 정보
위의 별명은 깊은 파일 시스템의 루트 디렉토리에서 실행될 때 고통스럽게 느리 므로이 단순하지만 훨씬 더 성능이 뛰어난 명령으로 업데이트했습니다.
ls -AFoqv --color --group-directories-first | tail -n +2 && find -maxdepth 1 -type f -printf '%s\n' | awk '{total+=$1} END {print total" bytes"}'
샘플 출력 :
$ dir
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .aws/
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .gem/
drwxr-xr-x 1 Tom 0 Mar 29 19:32 .ssh/
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .zbstudio/
drwxr-xr-x 1 Tom 0 Jun 16 2016 temp/
drwxr-xr-x 1 Tom 0 Jul 13 2016 vimfiles/
-rw-r--r-- 2 Tom 365 Mar 30 10:37 .aliases
-rw-r--r-- 1 Tom 16028 Mar 30 12:12 .bash_history
-rw-r--r-- 2 Tom 2807 Mar 30 12:12 .bash_profile
-rw-r--r-- 2 Tom 2177 Mar 29 23:24 .functions
-rw-r--r-- 1 Tom 1091 Mar 30 10:34 .gitconfig
-rw-r--r-- 1 Tom 8907 Mar 29 14:45 _viminfo
-rw-r--r-- 1 Tom 2444 Jul 13 2016 _vimrc
33819 bytes
Windows 용 Git Bash의 새 버전이 지원 --group-directories-first
되므로 더 이상 사용할 필요가 없습니다 sort
. 새 별칭이 이전 별칭만큼 많은 정보를 표시하지 않더라도 성능 향상은 그 이상의 가치가 있습니다. 특권으로, 당신은 또한 색상을 얻을!
알파벳 순서를 유지 하려는지 여부에 따라 몇 가지 선택 사항이 있습니다.
당신은 단순히 시도 할 수 있습니다 :
LS-알 | 정렬 -k1 -r
또는 동일한 권한을 가진 파일의 알파벳 순서를 유지하려면 다음을 수행하십시오.
LS-알 | 정렬 -k1,1 -k9,9 -r
또는 eleven81이 말했듯이 (이 버전은 모든 것을 나열합니다)
LS -LA | grep "^ d"&& ls -la | grep "^-"&& ls -al | grep -v "^ [d |-]"
ls- al|sort -k1 -r
효과가 있습니다. 누락 된 것은 단지 -r
플래그입니다.
./
및 ../
순서대로, 처음 두 행되지 않을 것이다. 그 외에는 더 효율적인 솔루션이라는 데 동의합니다.
이 작업을 수행하는 기능 (bash 또는 zsh)이 있습니다.
기능 lss { # 맨 위에 디렉토리가있는 디렉토리 목록을 표시합니다. 명령 ls --color = 항상 $ @ | egrep '^ d | total' 명령 ls --color = 항상 $ @ | egrep -v '^ d | total'; }
ls -l
파일 형식별로 필터링 하려면 긴 목록 형식 ( ) 을 사용해야 합니다. 또한이 명령은 공백 (bash)에서 중단됩니다. 다음과 같이 인용해야합니다. "$@"
이 방법을 사용하려면 다음과 같이 할 수 있습니다.function lss {local temp="$(command ls -l --color=always "$@")"; egrep --color=never '^d|total' <<<"$temp"; egrep --color=never -v '^d|total' <<<"$temp"}
또 다른 방법 ...
find . -d 1 -type d | ls -la | sort -r
또는
ls -la | sort -r
또는
d=`find . -type d -d 1`;f=`find . -type f -d 1`; echo -e -DIRS- "\n$d\n" -FILES- "\n$f"
alias ls='ls -lhF --color'
list_sorted() {
ls $* | grep "^d";
ls $* | grep "^-";
ls $* | grep -v -E "^d|^-|^total"
}
alias ll=list_sorted
여기에 답변과 의견에 제공된 솔루션 조합을 사용합니다.
ls
우선, 나는 다음에 대한 기본 동작을 덮어 씁니다 ls
.
-l
: 항상 목록을 1 차원의 수직 목록으로 표시-h
: 사람이 읽을 수있는 방식으로 파일 크기 표시 (예 : 4096 대신 4.0K)-F
: 디렉토리의 슬래시와 같은 표시기를 표시합니다.alias ls='ls -lhF --color'
ll
다음으로 정렬 논리를 포함하는 함수를 작성합니다. 각각에 ls
대해 원래 전달 된 인수를 전달합니다. 그러면 내가 나열하려는 작업 디렉토리와 다른 작업 디렉토리의 별칭을 사용할 수 있습니다 (예 :) ls -a ~
.
또한 각 호출 ls
은 grep
명령으로 파이프됩니다 . 여기에서 정렬이 이루어집니다. ls -l | grep "^d"
예를 들어 디렉토리 만 나열합니다. 디렉토리가 먼저 나열되어야하는 경우,이 기능도 우선적으로 수행되어야합니다. 다음은 파일입니다.
마지막으로, 나는 디렉토리 나 파일이 아닌 모든 것을 보여줍니다 (디렉토리 내용의 총 크기를 나타내는 줄도). 이는 directoy, 일반 파일 항목 및 총 항목을 잡고 -v
인수 를 통해 결과를 반전시켜 수행 됩니다.
list_sorted() {
# List directories
ls $* | grep "^d";
# List regular files
ls $* | grep "^-";
# List everything else (e.g. symbolic links)
ls $* | grep -v -E "^d|^-|^total"
}
마지막으로 함수를 새 명령에 별칭으로 지정합니다. 특히 ls
일부 시나리오에서 함수가 중단되는 경우 를 덮어 쓰지 않습니다 . 그런 다음 사용할 수 있기를 원합니다 ls
. 또는 항상 호출하여 에일 리어 징 제거 ls
명령을 호출 할 수 있습니다 \ls
.
alias ll=list_sorted
;
대신 대신 사용 &&
합니다. 그렇지 않으면 디렉토리를 포함하지 않는 디렉토리의 내용을 나열 할 수 없습니다 (첫 번째 ls 명령은 false로 평가되므로 다음 명령이 &&
. ;
피하기 때문에 실행되지 않음 ).이것은 스크립트 솔루션입니다. 알파벳 순으로 대소 문자를 구분하지 않고 열로 포맷 된 이름 만, inode 데이터는 표시하지 않습니다. ls의 기본 출력과 같이 열 주요 대신 행 주요입니다. 26자를 초과하는 파일 이름이 있으면 열이 약간 지저분 해집니다.
rm -f /tmp/lsout
ls -1p | grep / | sort -f >> /tmp/lsout
ls -1p | grep -v / | sort -f >> /tmp/lsout
IFS=$'\n' read -d '' -r -a lines < /tmp/lsout
printf "%-24s %-24s %-24s\n" "${lines[@]}"
그리고 또 다른 형식이 추가되었습니다.
rm -f /tmp/lsout
echo " ---- Directories ---- " >> /tmp/lsout
ls -1p | grep / | sort -f >> /tmp/lsout
IFS=$'\n' read -d '' -r -a lines < /tmp/lsout
printf "%-24s %-24s %-24s\n" "${lines[@]}"
rm -f /tmp/lsout
echo " ------- Files ------- " >> /tmp/lsout
ls -1p | grep -v / | sort -f >> /tmp/lsout
IFS=$'\n' read -d '' -r -a lines < /tmp/lsout
printf "%-24s %-24s %-24s\n" "${lines[@]}"
마지막 출력은 다음과 같이 색상을 뺀 것과 같습니다.
---- Directories ---- archive/ bookmarks/
Desktop/ Documents/ Downloads/
fff/ health/ Library/
Movies/ Music/ Pictures/
Public/ rrf/ scifi/
testdir/ testdir2/
------- Files ------- @todo comedy
delme lll maxims
schedule vtokens style
이 스크립트가 호출하기 때문에 ls의 기본 동작을 별칭으로 지정하거나 변경하지 마십시오.
-
오기 전에d
사용하는 경우sort