디렉토리에 포함 된 모든 파일 형식을 표시하려면 어떻게해야합니까?


12

특정 디렉토리에 어떤 유형의 파일이 있는지 알려주는 명령이 있습니까?

와 같은 명령을 사용하여 파일 형식을 찾을 수 있습니다 od -c myfile | less.

그러나 디렉토리의 모든 파일에 대해 수행하는 방법을 모르겠습니다.

답변:


19

od -c실제로 파일의 내용을 표시 하지만 파일 형식을 얻는 좋은 방법은 아닙니다. 일부 파일은 파일 형식의 헤더를 포함하지만 모든 파일을 포함하지는 않습니다. 더 좋은 방법은 명령입니다 file.

$ echo "hello" > foo.txt
$ file foo.txt
foo.txt: ASCII text

따라서 디렉토리의 모든 파일 유형 목록을 얻으려면 다음을 수행하십시오.

for file in dir/*; do file "$file" | cut -d: -f 2; done | sort -u

출력 예 :

 PNG image data, 1500 x 500, 8-bit/color RGBA, non-interlaced
 ASCII text
 directory
 GIF image data, version 89a, 22 x 22
 ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=becf821e4d814fdb69306d0b3f686eb06992f5e5, stripped

설명

  • for file in dir/*; do ... done;: 모든 것을 통해 반복 처리는 dir( dir로 차례로 각 항목을 저장, 단지 예를 들어, 당신은을 통해 검색 할 실제 디렉토리의 이름으로 변경해야한다)$file
  • file "$file": file발견 된 각 항목에서 실행 합니다.
  • cut -d: -f 2: 두 번째 필드 만 인쇄 (에 의해 정의 된 필드 :)
  • sed 's/^ //; s/ +/ /g' : 줄의 시작 부분에서 공백을 제거하고 연속 공백을 단일 공백으로 변환합니다.
  • sort -u : 중복 파일 형식 제거

감사합니다,하지만 정확히 "DIR / *에있는 파일, 파일 할"과거 복사 $ 파일을 "| 절단 -d : 2 -f | 종류 -u, 수행"내 터미널에서 내가 "ERROR"있어요
모하마드 레자 Rezwani을

2
@alex 우선, "ERROR"라는 메시지가별로 유용하지 않다는 정확한 오류를 항상 언급하십시오. 어쨌든 오류는 아마도 이름이라는 디렉토리가 없기 때문일 수 있습니다 dir/. 예를 들어, 이름은 실제 디렉토리의 이름으로 변경해야합니다 for file in /home/alex/*; do ... done.
terdon

고마워, 당신이 내 잘못한 일을했다면 (... 디렉토리는 디렉토리가 아닌 ls와 같은 명령이라고 생각했습니다-죄송합니다-또한 대답을 편집하는 것이 더 좋습니다)
Mohammad Reza Rezwani

좋은 일, thnaks, 그러나 예를 들어 네 줄 "ID3 버전 2.3.0 오디오 파일 포함"또는 둘 이상의 "ISO 미디어, MPEG v4 시스템, 버전 2"를 보았습니다. "중복 제거"에 대해 잘 모르겠습니다.
Mohammad Reza Rezwani

@alex fair, 답변이 수정되었습니다. 중복이 없어야합니다. (가) sort -u선이 서로 달라야합니다, 그들을 제거합니다 (그들은 또한 공간의 다른 숫자가있을 수 있습니다, 그것은 그들이 비 동일합니다).
terdon

3

아마 이런 식으로 할 것입니다-

find . -type f -exec file {}  \;

현재 경로에서 파일 (예 : 디렉토리 없음)을 찾은 다음 file각 파일 에서 명령 을 실행 합니다.


1

이 시도:

ls | xargs file -b | sort | uniq

작동 방식 :

ls : 디렉토리 내용 나열

file -b : 파일 형식을 결정합니다. 출력 라인 앞에 파일 이름을 추가하지 마십시오

정렬 : 라인 정렬

uniq : 반복되는 줄 생략



1
파싱을 피하기 위해 file -b *대신 사용할 수 있습니다 . ls | xargs file -bls
wjandrea
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.