디렉터리 및 하위 디렉터리 아래의 파일 형식 목록을 확인하는 방법

디렉터리 및 하위 디렉터리 아래의 파일 형식 목록을 확인하는 방법

CentOS의 명령을 통해 디렉터리 및 하위 디렉터리의 파일 형식을 어떻게 알 수 있나요?

출력은 다음과 같아야 합니다.

.inc, .inp, .odb, .a3db, .......

답변1

고유한 파일 확장자 목록을 가져옵니다(이것은아니요Unix에서 "파일 형식"을 나타냄), 다음을 수행할 수 있습니다.

find . -type f -name '*.*' -exec sh -c '
    for pathname do
        printf "%s\n" "${pathname##*.}"
    done' sh {} + | sort -u

이름에 점이 하나 이상 포함된 현재 디렉토리 안이나 아래의 모든 일반 파일을 찾습니다. 이러한 경로 이름의 경우 마지막 점까지 모든 것을 제거하고 나머지 문자열을 인쇄하는 짧은 스크립트가 실행됩니다. sort -u그런 다음 중복 항목을 제거하면서 정렬하세요.

이는 파일 확장자에 개행 문자가 포함되어 있지 않다고 가정합니다.

이를 한 줄의 쉼표로 구분된 목록에 넣으려면 출력을 파이프하십시오 tr '\n' ','(이렇게 하면 줄 바꿈 대신 줄 끝에 쉼표가 생깁니다).

출력에 점을 포함하려면 printf형식 문자열을 에서 로 %s\n변경 하세요 .%s\n.


Unix에는 일반 파일, 디렉터리, 명명된 파이프, 문자 및 블록 특수 파일 등과 같은 파일 형식이 있습니다. 그러나 이러한 유형은 파일 이름으로 구별되지 않습니다.

답변2

그리고 zsh:

typeset -U ext
ext=(**/?*.*(ND:e))
print -r -- ${(j:, :)ext}

답변3

그러면 모든 디렉터리와 하위 디렉터리의 모든 파일 확장자 목록이 반환됩니다.

  • find명령은 디렉터리 및 하위 디렉터리에서 모든 파일을 찾은 다음 grep파일 이름에 점이 있는 파일을 찾습니다.
  • awk.(점)을 구분 기호로 사용하고 마지막 필드( )를 인쇄 하여 $NF모든 파일의 확장자를 인쇄합니다.
  • 마지막으로 uniq 확장자만 인쇄하려면 sort및 를 사용하세요.uniq
find <DIRECTORY_NAME> -type f -printf "%f\n"   | grep '\.' | awk -F '.' '{print $NF}' | sort | uniq

관련 정보