수많은 파일에서 특정 매직 바이트 검색

수많은 파일에서 특정 매직 바이트 검색

특정 파일 형식을 검색하는 방법을 알고 싶습니다. SSH 서버에 들어가서 파일을 검색하려고 하는데 .jpg서버 소유자(선생님)가 모든 확장자를 제거했습니다.

시도해 보았고 grep -lr "JFIF"동일한 파일 이름을 가진 많은 디렉터리를 찾았으므로 명령으로 찾은 임의의 디렉터리로 뛰어들어 명령 grep을 사용하려고 시도했지만 cat터미널에서 전체 바이너리를 표시할 수 없었습니다.

그리고 stringsssh 서버에서는 명령어가 차단되어 있는데 선생님께서 jpg 파일을 찾아야 하고 이 파일에 일련번호(SN)가 포함되어 있다고 하셨는데 어디서 찾을 수 있는지 모르겠어요.

여러분이 SSH 카디널스를 원하신다면 기꺼이 나눠드릴 것입니다. 어쨌든 선생님은 명령을 사용하여 file그렇게 할 수 있다고 말씀하셨지만 저는 어떻게 해야 할지 모르겠습니다.

그나저나: 그가 그러더군요 (SN)

답변1

여러분이 직접 HW를 해결할 수 있도록 몇 가지 힌트를 드리고자 합니다.

다음 단계를 따르세요.

  1. file를 실행하여 매뉴얼을 읽어보세요 man file.
  2. 그런 다음 시험해보고 file somefile무슨 일이 일어나는지 확인하십시오.
  3. file다른 파일 형식으로 실행해 보세요.
  4. 이제 일부 파일이 JPEG 이미지인지 확인하는 방법을 이해할 수 있을 것입니다.
  5. 이제 설명서를 읽어보세요 find(또는 Google을 사용하여 일부 디렉터리와 모든 하위 디렉터리에 있는 모든 파일을 찾는 방법을 알아보세요).
  6. 이제 이전에 사용한 명령 과 연결하기 위해 -exec옵션을 사용하는 방법을 알아보십시오.findfile
  7. 이제 필요한 디렉토리에 있는 모든 파일의 파일 형식을 찾아 나열할 수 있습니다.
  8. 이제 JPEG 파일만 필터링하는 방법을 알아보려면 파이프 |및 명령에 대해 읽어보세요.grep

답변2

우선 내 질문에 직접 대답하지 않고 많은 새로운 것을 이해하는 데 도움을 준 @incBrain과 @Serg에게 감사를 표하고 싶습니다 :).

내 작업은 확장자가 제거된 특정 .jpg파일을 찾는 것이었습니다. 제가 가장 먼저 생각한 것은.jpg 매직 바이트이는 JFIF@incBrain 지침을 사용하여 이 명령을 작성할 수 있었습니다.

find / -exec file {} \; | grep "JFIF"

해당 줄은 명령을 명령 find에 연결한 다음 & 명령 의 출력을 모두 가져오고 바이너리 aka에 포함된 파일만 표시하는 명령 의 파이프 기호를 통해 입력으로 전송합니다 .file-execfindfile|grepJFIF.jpg files

내 문제는 실제로 특정 일련 번호를 찾는 것이었습니다. 처음에는 일련 번호가 파일의 바이너리에 포함되어 있었지만 그게 틀렸다고 생각했지만 미친 생각이 떠올랐습니다.

오! 사진이 어떻게 생겼는지 볼 수 없나요? 일련 번호를 찾을 수 없다면 사진을 얻는 것이 좋을 것입니다.

그리고 SSH에서 내 컴퓨터로 파일을 전송하는 좋은 방법을 찾기 위해 인터넷을 검색했는데 제대로 된 이 코드 블록을 발견했습니다!

scp [email protected]:/home/example/file.txt /Local_Directory

이 답변이 미래에 누군가에게 도움이 되기를 바랍니다 :).

답변3

한 가지 가능한 해결책은 다음과 같습니다. find일반 파일( -type f)을 재귀적으로 나열하고 file각 파일에 대해 명령을 수행하는 사용입니다. grep파일 형식을 필터링 하려면 출력을 리디렉션하세요 .

하지만 여기서는 그보다 더 재미있는 일을 하고 싶습니다. 더 어색하지만 더 재미있습니다.

$ find .  -maxdepth 1 -type f -printf "%f\t" -exec hexdump -n8 {} \;  | awk '/d8ff e0ff 1000 464a/{print $1}'

모든 파일에 파일 형식을 지정하는 첫 8바이트가 있다는 것을 알 수도 있고 모를 수도 있습니다. 따라서 를 사용하여 find모든 일반 파일을 검색하고 이름을 인쇄한 다음 hexdump를 실행하여 처음 8바이트를 추출하고 awk처음 8바이트가 있는 파일 이름만 필터링합니다.

여기에 작은 증거가 있습니다:

$ hexdump -n 10 1450763029649.jpg               
0000000 d8ff e0ff 1000 464a 4649               
000000a

$ hexdump  -C -n 10 1450763029649.jpg           
00000000  ff d8 ff e0 00 10 4a 46  49 46                    |......JFIF|
0000000a

답변4

file * | grep -i "jpeg"

그러면 디렉터리의 모든 파일을 검색하여 해당 파일 형식을 반환합니다. 파이프를 통해 |이러한 결과는 grep을 통해 검색되어 "jpeg" 파일 유형 또는 기본적으로 .jpg 파일을 찾습니다.

관련 정보