우분투에서 비디오 파일을 검색하는 방법?


12

몇 달 전에 비디오를 다운로드했습니다. 나는 그것이 저장되는 이름을 잘 기억하지 못한다. 비디오 파일 만 출력하여 비디오를 검색 할 수있는 명령이나 방법이 있습니까? 매뉴얼 페이지에서 해당 작업을 수행하는 옵션을 찾을 수 없습니다.

다운로드 한 비디오 파일의 확장명 (webm 등)이있을 수 있으며 그 당시 이름을 'abcde'와 같은 이름으로 변경했을 수도 있습니다. 따라서 검색은 파일 이름을 기반으로 할 수 없습니다!

(단 하나의 유사성을 언급하는 것 : perl에는 파일이 텍스트 파일인지 바이너리인지 등을 확인하는 명령이 있습니다. 마찬가지로 비디오 파일 또는 멀티미디어 파일인지 확인하는 방법이있을 수 있습니다)

답변:


15

기본 아이디어는 파일 유틸리티를 사용하여 각 파일의 유형을 결정하고 비디오 파일을 필터링하는 것입니다.

find /some/directory -type f -exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'

MIME 형식이 비디오 형식 인 모든 파일 /some/directory과 그 하위 디렉터리 의 이름을 반복적으로 인쇄합니다 .

file명령은 모든 파일을 열어야하며 속도가 느릴 수 있습니다. 속도를 높이려면 :

  • 는 IT가 같은 될 가능성이 높습니다 디렉토리 트리에 명령 제한 /tmp, /var/tmp및 홈 디렉토리를.
  • 올바른 야구장 크기의 파일 (예 : 10MB 이상)로 검색을 제한하십시오.
  • 수정 시간이 올바른 야구장에있는 파일로 검색을 제한하십시오. 파일을 다운로드하면 수정 시간을 다운로드 시간으로 설정했거나 다운로드에 사용한 프로그램 및 설정에 따라 시간이 유지 될 수 있습니다. 또한 inode 변경 시간 (ctime)을 필터링하여 파일을 마지막으로 수정하거나 이동 한 시간 (생성, 이름 변경 등)을 할 수 있습니다.

다음은 수정 시간을 60 일 전으로 제한하고 ctime을 100 일 전으로 제한하는 예입니다.

find /tmp /var/tmp ~ -type f -size +10M \
     -mtime +60 -ctime -100 \
     -exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'

첫 번째 명령은 비디오 이외의 다른 많은 파일을 가져옵니다. 예를 들어 출력의 한 줄은 다음과 같습니다. /home/ravbholua/Downloads/Music_Command_line/[SOLVED] a code question regarding music file extensions_files/avatar774785_6.gif: image/jpeg; charset=binary 다른 출력 줄은 다음과 같습니다. /home/ravbholua/Free Computer Networking Books Download | Ebooks Online Textbooks.html: text/html; charset=iso-8859-1 vlc 플레이어 등에서 실행할 비디오 파일 만 필요
Ravi

@Ravi 실수 sed로 일치하지 않는 줄을 제외 하는 옵션 (및 file잘못된 위치에서 줄을 나누지 않는 옵션)을 실수로 생략했습니다 . 내 편집을 참조하십시오.
Gilles 'SO- 악의를 멈춰라'

예, 질, 그게 내가 원하는 것입니다. 그것은 훌륭하게 작동했습니다! 명령을 실행 한 후 시스템에 내가 알지 못하는 많은 비디오 (일부 완전하고 일부는 불완전 함)가 있음을 알게되었습니다. 감사합니다.
Ravi

1
비디오 파일에 예측 가능한 확장자가없는 경우 이상적인 솔루션입니다. 의지 file하는 유일한 옵션입니다.
miguelg

13

파일 이름으로 검색

Chris가 자신의 답변에서 언급 했듯이이 find작업을 수행 하는 데 사용할 수 있지만 locate데이터베이스 를 검색하는 것이 훨씬 빠릅니다 .

당신의 배포판이이 시설을 제공한다고 가정하면, 대부분의 큰 것들이 우분투, 페도라, CentOS 등을 제공합니다.

$ locate --basename .mp4 .mkv .wmv .flv .webm .mov .avi | head -5
/home/saml/Desktop/sample_mpeg4.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 1.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 10.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 2.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 3.mp4

파일 형식으로 검색

유형별로 파일을 찾으려면 명령 file을 사용하여 특정 파일 유형에 대한 정보 목록을 얻을 수 있습니다 .

다음은 내 시스템 인 Fedora 19의 파일 형식에 대한 대략적인 목록입니다.

  • .mp4 : ISO 미디어, MPEG v4 시스템, 버전 1
  • .mkv : EBML 파일, 제작자 matroska
  • .wmv : Microsoft ASF
  • .flv : Macromedia Flash 비디오
  • .webm : WebM
  • .mov : ISO 미디어, Apple QuickTime 동영상
  • .avi : AVI

이 명령을 사용하여 /home/<user>디렉토리의 모든 파일을 찾을 수 있습니다 .

$ find /home/<user> -type f -exec file {} + | \
    grep -E "MPEG v4|EBML|\
      Microsoft ASF|Macromedia Flash Video|WebM|Apple QuickTime movie|AVI"

또는 file"비디오"로 분류 된 MIME 유형별로 사용 하고 검색 할 수 있습니다 .

 -i, --mime
         Causes the file command to output mime type strings rather than 
         the more traditional human readable ones.  Thus it may say 
         ‘text/plain; charset=us-ascii’ rather than “ASCII text”.

우리가 위에서 한 일을 다음과 같이 조정하십시오.

$ find /home/<user> -type f -exec file -i {} + | grep video

sed파일 이름을 얻는 데 사용할 수 있습니다 .

$ find /home/<user> -type f -exec file -i {} + |
    sed -n '/video/s/:[^:]\+$//p'

+1은 물론 locate설치된 것으로 가정 할 뿐만 아니라 데이터베이스가 구축되었다고 가정합니다 .
Chris Down

예, 또한 데이터베이스는 일반적으로 대부분의 배포판에서 야간에 구축되므로 야간 추가 작업이 실행되어 추가 될 때까지 최근에 추가 된 파일은 DB에 없습니다.
slm

1
가장 일반적인 것 중 하나를 잊었습니다 avi.
Faheem Mitha

6

이제 확장을 기반으로 할 수 없도록 지정 했으므로 묵상 할 수도 있습니다 file(경고 : 시간이 오래 걸릴 수 있음).

find ~ -type f -exec file -i {} + | grep video 

일반적인 비디오 확장명을 가지고 있고 홈 디렉토리에 있다고 가정하고 파일 이름으로 검색 할 수있는 경우 :

find ~ -type f -name '*.mkv' -o -name '*.mp4' -o -name '*.wmv' -o -name '*.flv' -o -name '*.webm' -o -name '*.mov'

정규식을 사용할 수도 있습니다.

find ~ -type f -regex '.*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\)'

mtime을 다운로드 한 시점과 mtime이 해당 시간으로 설정되었다고 가정하면 GNU find -mtime옵션을 사용 하여 범위를 좁힐 수도 있습니다.


1
또한 임계 값보다 큰 파일을 모두 표시 할 수 있습니다 (비디오 파일이 매우 크다고 가정) ...
ChuckCottrill

Chris Down, 파일 이름을 사용하는 방식이 작동하지 않습니다. Q를 편집했습니다. 살펴보세요
Ravi

@Ravi mimetypes를 사용하는 업데이트 된 답변을 참조하십시오.
Chris Down

첫 번째 명령은 비디오 이외의 다른 많은 파일도 가져옵니다. 예를 들어, 출력의 한 줄은 다음과 같습니다. 출력의 /home/ravbholua/Downloads/Music_Command_line/Any s_w to cut_add audio files, convert video to audio?_files/post_old.gif: image/gif; charset=binary 다른 줄은 다음과 같습니다. /home/ravbholua/Downloads/Music_Command_line/command line - how to start a video from the terminal? - Ask Ubuntu.html: text/html; charset=utf-8 그것은 내 목적을 해결하지 못합니다.
Ravi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.