Pastebinit에서 파일 형식을 자동으로 감지하는 방법은 무엇입니까?

Pastebinit에서 파일 형식을 자동으로 감지하는 방법은 무엇입니까?

나는 사용한다붙여 넣기 binit클립을 공유하세요. 보시다시피, -f렌더링된 웹 페이지에서 파일 형식(예: -f python또는 -f bash)에 따라 업로드된 파일을 강조 표시하는 스위치가 있습니다.

이제 수동으로 올바른 스위치를 제공할 필요가 없도록 코드 조각 파일 형식을 자동으로 감지하고 싶습니다.

  1. Pastebit에서 이것이 가능합니까?
  2. 이것을 스크립트로 래핑하고 다른 유틸리티를 사용하여 파일 형식을 감지할 수 있습니까?

예를 들어 다음을 사용해 보았지만 file여기서는 유용하지 않다고 생각합니다.

$ file --mime-type -b main.c 
text/x-c  # Should have been C

$ file --mime-type -b script.py 
text/x-python  # Should have been Python

$ file --mime-type -b README.md 
text/plain  # Should have been Markdown

$ file --mime-type -b ~/.bashrc 
text/plain  # Should have been Bash

$ file --mime-type -b ~/blah/main.cpp 
text/x-c  # Should have been Cpp

답변1

자동 도구는 내용이나 이름만 보고 특정 파일의 유형을 식별할 수 없습니다. file및 기타 유사한 도구는 정보를 바탕으로 추측을 할 뿐이며 일부 파일 형식이 겹칠 수 있으므로 항상 정확할 필요는 없습니다(흥미로운 사실 ​​- 파일별로 Quake 파일로 식별되던 Slackware Linux 패키지 로그 파일) 또는 일부 파일 형식이 다른 파일 형식과 쉽게 구별될 만큼 구체적이지 않기 때문입니다(Markdown의 전체 목적은 .md 파일을 일반 텍스트 파일처럼 보이게 만드는 것입니다).

귀하의 예에서는 모든 파일의 .bashrc확장자가 다르기 때문에 이를 사용하여 유형을 식별할 수 있는 스크립트를 작성할 수 있지만 *nix 시스템에서는 파일 확장자가 특정 프로그램에서만 작동한다는 점을 명심해야 합니다. 프로그램이 중요합니다. 커널은 상관하지 않습니다. 예를 들어, script.sh쉘 스크립트를 작성하십시오.

$ cat << EOF > script.sh
> #!/usr/bin/env bash
>
> echo hi
> EOF

실행 가능 비트를 설정하고 실행합니다.

$ chmod +x ./script.sh
$ ./script.sh
hi

이름을 바꾸고 script.md다음을 실행하십시오.

$ mv ./script.sh ./script.md
$ ./script.md
hi

보시다시피 이름을 script.md.

이것은 ~이 될 것이다상당히최신 언어(예: Python 또는 Bash)에서 파일 이름 확장자를 기반으로 파일 형식을 추측할 수 있는 도구를 작성하는 데 사용됩니다. whatisthis.shBash의 예 는 다음과 같습니다 .

#!/usr/bin/env bash

if [ ! $# -eq 1 ]
then
    printf "Usage: %s file_with_extension\n" "$0" >&2
    exit 1
fi

ext="$(rev <<< "$1" | cut -d . -f1 | rev)"

declare -A extensions=(
    [c]=C
    [py]=Python
    [md]=Markdown
    [cpp]=Cpp
)

printf "%s\n" "${extensions["$ext"]}"

용법:

$ ./whatisthis.sh README.md
Markdown
$ ./whatisthis.sh main.py
Python
$ ./whatisthis.sh main.c
C

물론 그 외에도 더 많겠지만, 아마도다양한 파일 유형에 대해 수천 가지의 다양한 파일 확장자가 있습니다. 그리고 아마도 누군가 파일 확장자를 사용하여 유형을 식별하는 보다 강력한 스크립트를 작성했을 가능성이 높습니다.

이에 관해서 .bashrc는 추가하여 식별할 수 있습니다. 모든 새로운 대화식 쉘에서 선택되고 로 시작하는 모든 줄이 주석으로 처리되므로 추가해도 중단되지 않습니다.file#!/usr/bin/env bash#

대체로 파일 형식을 자동으로 감지할 수 있는 방법은 없습니다. 최상의 결과를 얻으려면 파일 확장자를 결합하고 확인해야 file하지만, 궁극적으로 주어진 파일의 용도를 이해하는 것은 항상 인간 사용자의 몫입니다.

관련 정보