디렉토리에 있는 특정 유형의 파일을 나열하시겠습니까?

디렉토리에 있는 특정 유형의 파일을 나열하시겠습니까?

(현재 디렉토리 내의) 디렉토리만 나열하려면 다음을 사용하십시오.ls -d */

일반 파일, 실행 파일, 소프트 링크 또는 기타 유형의 파일만 나열하려면 어떻게 해야 합니까?

실행 파일, 심볼릭 링크 파일, 디렉토리 에 ls -F 추가하기 때문에 시도 했지만 작동하지 않습니다.*@/ls -d **ls -d *@

답변1

에 설명된 파일 테스트 연산자를 사용할 수 있습니다 man test. 예를 들어 심볼릭 링크를 나열하려면 다음을 수행합니다.

for i in *;do if [ -L "$i" ] ;then printf -- "%s\n" "$i";fi;done

답변2

당신은 그것을 사용할 수 있습니다 find.

모든 파일 나열:

find . ! -name . -prune -type f

모든 심볼릭 링크를 나열합니다.

find . ! -name . -prune -type l

모든 실행 파일을 나열합니다.

find . ! -name . -prune -type f -perm +111

POSIX를 읽을 수 있습니다찾다고급 옵션에 대한 문서입니다.

답변3

이와 같은 명령은 ls -d *@로 시작하는 이름을 나열합니다 @. 이 @문자는 파일 이름이 일치해야 하는 패턴의 일부입니다. 파일 이름 뒤에 문자가 표시 되면 ls -F해당 문자는 파일 이름의 일부가 아니며 추가 표시가 추가됩니다 ls(이 옵션의 요점 -F).

ls나열할 파일 형식을 선택하는 옵션이 없습니다. 파일 이름에 특수 문자(예: 줄 바꿈 또는 ls -F추가된 접미사) 가 포함되어 있지 않은 경우 ls -F특정 유형의 파일을 나열하고 를 사용하여 해당 출력을 필터링할 수 있습니다. 예를 들어, 현재 디렉토리의 심볼릭 링크를 나열하려면 다음을 사용할 수 있습니다.

ls -F | grep '@$'

선택한 유형의 파일을 나열하는 보다 안정적인 방법은 find명령을 사용하는 것입니다. ls와 달리 find재귀적입니다. 이 -prune작업을 사용하면 재귀를 중지할 수 있습니다. 또 다른 차이점은 이름이 find(dot-file)로 시작하는 파일은 쉘 모드처럼 특별히 처리되지 않고 건너뛰어진다는 것입니다 . 예를 들어, 다음 명령은 현재 디렉터리의 심볼릭 링크를 나열합니다..ls*

find . -name . -o -type l -print -o -prune

필터링을 수행하는 또 다른 방법은 모든 파일을 반복하고 테스트하여 원하는 파일을 선택하는 것입니다.

for x in *; do
  if [ -L "$x" ]; then echo "$x"; fi
done

zsh에서는 사용할 수 있습니다글로벌 예선유형별로 파일을 제한합니다. 예를 들어, 다음 zsh 명령은 현재 디렉터리의 기호 링크를 나열합니다.

print -rl *(@)

답변4

목록에서 c 소스 파일(접미사 .c)만 보고 싶다고 가정해 보겠습니다.

ls -l *.c

그러면 모든 C 코드 파일이 나열됩니다.

즐기다

관련 정보