파일의 일반 파일 확장자를 확인하는 방법

파일의 일반 파일 확장자를 확인하는 방법

file명령은 내 필요에 따라 파일 형식을 결정하는 데 유용합니다. 이러한 결과를 기존 파일 확장자로 매핑할 수 있는 방법이 있습니까?

답변1

시스템에 등록된 파일 확장자는 이어야 합니다 /etc/mime.types. 따라서 출력에서 ​​파일 형식을 file이라는 변수로 추출한다고 가정하면 type다음과 같이 간단히 수행할 수 있습니다.

grep -i "$type" /etc/mime.types | awk '{$1="";print $0}'

또는 (주석에서 제안한 200_success와 같이) awk이것을 단독으로 사용할 수 있습니다.

awk -v IGNORECASE=1 '/ENVIRON["type"]/{$1="";print $0}'

$ type=Perl
$ grep -i "$type" /etc/mime.types | awk '{$1="";print $0}'
 pl pm

답변2

이것은 @hildred와 동일한 기본 아이디어입니다.답변그러나 더 간단한 방법( gawk)을 사용하고 공백이 포함된 파일 이름과 알 수 없는 파일 형식을 처리하도록 수정하세요.

셸의 초기화 파일에 다음 줄을 추가합니다( ~/.bashrc예: 실행 중인 경우 bash).

get_ext(){
 for f in "$@"; do 
  type='unknown extension';
  foo=$(grep -w "$(file --mime-type "$f" | awk '{print $NF}')" /etc/mime.types | 
  awk -F"\t" 'NF>1{print $NF}')
  [ -n "$foo" ] && type="$foo";
  printf "%s\t%s\n" "$f" "$type";
 done    
}

이제 다음과 같이 실행할 수 있습니다.

$ get_ext *
cp  unknown extension
file with spaces .jpg   jpeg jpg jpe
foo.pl  pl pm
foo.png png
foo.py  py
foo.txt asc txt text pot brf srt

/etc/mime.types연결된 확장자가 없는 파일(예: cp실행 파일)의 경우 "알 수 없는 확장자"를 반환합니다.

답변3

첫 번째 확장이 정확하다고 가정하고 흥미로운 문자를 다루지 않는 개념 증명입니다.

file --mime-type -N *|sed \
   -e 's!^\(.*: \)\(.*\)$!echo \1;grep -e \2 /etc/mime.types!e' \
   -e 's!\n.*/[^     ]\+[    ]\+\([^ ]\+\).*! \1!' \
   -e 's!\n\(.*/[^     ]\)\+!\1!'

관련 정보