ls --clasify
*/=>@|
항목에 표시기( 중 하나 )를 추가합니다. 동일한 카테고리/측정항목의 항목을 그룹화하고 싶습니다.
ls --group-directories-first
그룹화해서 만 찾을 수 있는데 /
,실행 파일 *
, 심볼릭 링크 @
, 파이프 및 소켓을 |
그룹화하는 방법은 무엇입니까 =
?
ls
예아니요필수입니다. 더러운 해커라면 누구나 환영합니다. 그러나 출력 스타일에 관해서는 수행된 작업과 유사하게 표시기가 있는 다중 열 컬러 출력을 원합니다 ls -C --color -F
.
답변1
ls -CFUd
같은 것을 사용하세요무루하지만 에서는 zsh
다음을 시도해 볼 수 있습니다.
(set -o nullglob; ls --color -CFUd -- *(/) *(*) *(@) *(p) *(=) *(^/*@p=))
(...)
어디글로벌 예선디렉토리, 실행 파일, 심볼릭 링크, 파이프, 소켓 및 기타 모든 것과 일치합니다.
bytype
정렬 기능을 다음과 같이 정의 할 수도 있습니다 .
zmodload -F zsh/stat b:zstat
bytype() {
local mode order=(d l p s b c)
zstat -sLA mode +mode -- $REPLY
REPLY=$order[(ie)${mode[1][1]}]$REPLY
}
ls --color -CFUd -- *(o+bytype)
이는 패턴 텍스트 표현의 첫 번째 문자( ls -l
출력의 첫 번째 필드) 를 기준으로 정렬되므로 -
일반 파일, l
심볼릭 링크 등의 경우 배열에서 순위가 조회됩니다 $order
.
실행 파일은 파일 형식이 아니므로 특별히 취급되지 않습니다. ls -F
또는 glob 한정자 의 경우 *
실행 파일은 다음과 같습니다.정기적인권한에 하나 이상의 실행 비트가 설정된 파일(너실행 권한이 있으므로 다음과 같은 방법으로 처리할 수 있습니다.
zmodload -F zsh/stat b:zstat
bytype() {
local mode order=(d '*' l p s b c)
zstat -sLA mode +mode -- $REPLY
if [[ $mode = -*[xts]* ]] mode=('*')
REPLY=$order[(ie)${mode[1][1]}]$REPLY
}
답변2
더티 해킹이 널리 사용된다면 다음과 같은 상황이 발생할 수 있습니다.
ls -C --color -F -1 | rev | sort | rev
기본적으로:
rev
마지막 문자를 먼저 가져옵니다.- 그러면
sort
이제 마지막 문자가 먼저 사용됩니다. - 그런 다음
rev
원래 행을 다시 가져옵니다.
불행히도 단일 열 출력이 있습니다. 이를 적용하여 다중 열 출력을 얻을 수 있지만 column
인쇄되지 않는 문자로 인해 열이 왜곡됩니다.
$ ls -C --color -F /proc/self/ -1 | rev | sort -i | rev | column -x
fd/ task/ fdinfo/ attr/ ns/ net/ cwd@
exe@ root@ sched cmdline oom_score oom_score_adj oom_adj
stack syscall mem comm statm wchan environ
mountinfo io pagemap cgroup autogroup coredump_filter clear_refs
maps numa_maps smaps mountstats limits mounts status
stat schedstat cpuset auxv personality
물론 몇 가지 주의사항이 있습니다.
- 파일 이름에 개행 문자가 없습니다.
ls
파일 이름에 표시 문자가 없습니다.
find
bash 함수를 사용하여 sort
자체적으로 결합하면 ls
결과가 매우 유사합니다.
lsc () (
[[ -z $1 ]] && set .
for path
do
[[ -d $path ]] || { ls -CF --color "$path"; echo; continue; }
(( $# > 1 )) && printf '%s:\n' "$path"
find "$path" -maxdepth 1 -mindepth 1 ! -iname '.*' -printf "%y %p\0" |
while IFS= read -d '' -r entry
do
ftype="${entry:0:1}"
fname="${entry:2}"
[[ $ftype == f && -x $fname ]] && ftype=x
printf "$ftype $fname\0"
done | sort -z -k1 |
sed -z 's/^. //; s:.*/::' |
xargs -0 bash -c 'cd "$0"; ls -CFUd --color "$@"' "$path"
(( $# > 1 )) && echo
done
)
기본적으로 사용하면 ls
여러 열로 인쇄하는 것이 더 쉬워집니다.