ls로 유형별로 파일을 나열하려면 어떻게해야합니까? 첫 번째 문자는 파일 유형을 제공합니다. (

ls옵션과 함께 명령을 사용하면 -l첫 번째 문자 문자열이 각 파일에 대한 정보를 제공 하고이 문자열의 첫 번째 문자는 파일 유형을 제공합니다. ( d= 디렉토리, -= 표준 파일, l= 링크 등)

첫 글자에 따라 파일을 어떻게 필터링합니까?



답변

grep이 방법으로 디렉토리를 제외한 모든 것을 걸러 낼 수 있습니다 .

ls -l | grep '^d'

^패턴이 줄의 시작 부분에 있음을 나타냅니다. 교체 d-, l적용 가능한, 등.

물론 다른 명령을 사용하여 특정 유형 (예 :)을 직접 검색하거나이 첫 문자를 기반으로 유사한 유형을 함께 그룹화 find . -maxdepth 1 -type d하는 ls -l | sort데 사용할 수 있지만 필터링하려면 grep출력에서 적절한 행만 선택 해야합니다 .


답변

모든 출력을 표시하려고하지만 비슷한 유형의 파일을 함께 나열하려면 각 행의 첫 번째 문자에서 출력을 정렬 할 수 있습니다.

ls -l | sort -k1,1

답변

이 명령 ls은 디렉토리 데이터 구조에 기록되는 파일 이름을 처리 합니다 . 따라서 파일의 “유형”을 포함하여 파일 자체는 실제로 신경 쓰지 않습니다.

이름뿐만 아니라 실제 파일 작업에 더 적합한 명령 은 find입니다. 파일 형식으로 목록을 필터링하는 방법에 대한 질문에 직접 대답하는 옵션이 있습니다.

이것은 다음과 유사한 현재 디렉토리 목록을 제공합니다 ls -l.

find . -maxdepth 1 -ls

기본적으로, find1. 검색의 깊이를 제한하여 사용할 수 없습니다 재귀 목록 디렉토리,
당신은을 남길 수 있습니다 .,하지만 난 디렉토리 옵션 앞에 나열 할 필요가 보여 그것을 포함되어 있습니다.

을 사용하면 일반 파일 또는 디렉토리 -type로 표시 f되거나 파일 형식으로 표시되는 파일 유형별로 필터링 할 수 있습니다 d.

find . -maxdepth 1 -type d -ls

다른 필터 값이 있습니다 -type특히, l심볼릭 링크는.
주의점이 있다고 심볼릭 링크 파크 합병증 :
:이 경우 파일의 두 가지 유형이 있습니다 l, 심볼릭 링크를 나타내는이와 같은 f링크 된 파일의 형식을 나타내는이. 처리 방법을 지정하는 옵션이 있으므로 선택할 수 있습니다.


보낸 사람 man find:

    -type c
           File is of type c:

           b      block (buffered) special

           c      character (unbuffered) special

           d      directory

           p      named pipe (FIFO)

           f      regular file

           l      symbolic link; this is never true if the  -L  option
                  or  the -follow option is in effect, unless the sym‐
                  bolic link is broken.  If you  want  to  search  for
                  symbolic links when -L is in effect, use -xtype.

           s      socket

           D      door (Solaris)

심볼릭 링크 처리와 관련이 있습니다.

    -xtype c
           The  same as -type unless the file is a symbolic link.  For
           symbolic links: if the -H or -P option was specified,  true
           if the file is a link to a file of type c; if the -L option
           has been given, true if c is `l'.  In other words, for sym‐
           bolic  links, -xtype checks the type of the file that -type
           does not check.

    -P     Never follow symbolic links.  This is  the  default  behav‐
           iour.  When find examines or prints information a file, and
           the file is a symbolic link, the information used shall  be
           taken from the properties of the symbolic link itself.


    -L     Follow symbolic links.  When find examines or prints infor‐
           mation about files, the information  used  shall  be  taken
           from  the  properties of the file to which the link points,
           not from the link itself (unless it is  a  broken  symbolic
           link  or  find  is  unable to examine the file to which the
           link points).  Use of this option implies -noleaf.  If  you
           later  use  the -P option, -noleaf will still be in effect.
           If -L is in effect and find discovers a symbolic link to  a
           subdirectory during its search, the subdirectory pointed to
           by the symbolic link will be searched.

           When the -L option is in effect, the -type  predicate  will
           always  match  against the type of the file that a symbolic
           link points to rather than the link itself (unless the sym‐
           bolic  link  is  broken).   Using  -L causes the -lname and
           -ilname predicates always to return false.


    -H     Do not follow symbolic links, except while  processing  the
           command  line  arguments. [...]

답변

다른 파일 형식에서 폴더를 정렬하는 것이 가장 우려되는 경우

ls --group-directories-first

그렇지 않으면 Anthon의 답변에 따라 ls -l의 출력을 sort 또는 grep을 통해 파이프해야한다고 생각합니다.


답변

ls -l | awk '/^d/{print $NF}

awk는 d로 시작하는 모든 것을 잡을 것입니다. d는 디렉토리 용이므로 디렉토리 이름을 나열하려면 마지막 필드를 인쇄해야합니다.


답변

ls -l | sort

각 결과의 알파벳 순서에 따라 결과가 정렬됩니다. 첫 번째 문자가 원하는 기준이라면 바로 그 것입니다. 파일 이름 만 필요한 경우 다음을 시도해보십시오.

ls -l | sort | cut -f 2 -d ' '

또는 비슷한 명령 (이 명령은 공백 구분 기호를 사용하여 각 줄을 정렬 한 다음 두 번째 그룹을 반환합니다.