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