Ubuntuでビデオファイルを検索する方法は?


12

数か月前にビデオをダウンロードしていました。私はそれが保存された名前をあまりよく覚えていません。ビデオを検索できるように、ビデオファイルのみを出力するコマンドや方法はありますか?manページから、その作業を行うfindのオプションが見つかりませんでした。

ダウンロードしたビデオファイルには拡張子(webmなど)が付いている場合があります。また、その時点で名前が「abcde」のような名前に変更された可能性もありますが、今は覚えていません。そのため、検索はファイル名に基づいて行うことはできません!

(1つの類似点に言及すると:perlには、ファイルがテキストファイルかバイナリかなどをチェックするコマンドがあります。同様に、ビデオファイルかマルチメディアファイルかどうかをチェックする方法があるかもしれません)

回答:


14

基本的な考え方は、ファイルユーティリティを使用して各ファイルのタイプを判別し、ビデオファイルをフィルタリングすることです。

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

これにより/some/directoryMIMEタイプがビデオタイプであるすべてのファイルとそのサブディレクトリの名前が再帰的に出力されます。

fileコマンドが遅くなることがすべてのファイルを開く必要があります。物事をスピードアップするには:

  • コマンドを、可能性の高いディレクトリツリー(例:など)に制限します/tmp/var/tmpおよびホームディレクトリにます。
  • 適切なサイズのファイル(少なくとも10MBなど)に検索を制限します。
  • 変更時刻が正しい球場にあるファイルに検索を制限します。ファイルのダウンロードでは、ダウンロードに使用したプログラム(および設定)に応じて、変更時刻がダウンロード時刻に設定されるか、時刻が保持される場合があります。また、iノード変更時刻(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'

最初のコマンドは、ビデオ以外の多くのファイルを取得します。例えば、出力の1行は、次のとおりです。/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 sed一致しない行を除外するオプション(およびfile間違った場所で行を分割しないオプション)を誤って省略してしまいました。編集を参照してください。
ジル 'SO-悪であるのをやめる'

はい、ジル、それが私が欲しかったものです。それは見事に機能しました!あなたのコマンドを実行した後、私は私のシステムが私が知らなかった多くのビデオ(完全なものと不完全なもの)を持っていることを知りました。ありがとうございました。
ラヴィ

1
これは、ビデオファイルに予測可能な拡張子がない場合の理想的なソリューションです。に頼ることfileが唯一の選択肢です。
ミゲル14年

13

ファイル名で検索する

クリスが答えで述べたように、findこれを行うために使用できますが、locateデータベースを検索する方がはるかに高速であることがわかりました。

あなたのディストリビューションがこの機能を提供すると仮定すると、ほとんどの大きなものはUbuntu、Fedora、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'

もちろん、これもlocateインストールされていることを前提としているだけでなく、データベースが構築されていることを前提としています。
クリスダウン

はい。通常、ほとんどのディストリビューションではデータベースが毎晩構築されるため、最近追加されたファイルは、夜間ジョブが実行されて追加されるまでDBにありません。
slm

1
最も一般的なものの1つを忘れましたavi
ファヒームミタ

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がその時間に設定されていると仮定して)、GNU findの-mtimeオプションでそれを絞り込むこともできます。


1
あなたも...いくつかのしきい値よりも大きいサイズですべてのファイル(ビデオファイルを想定しては非常に大きい)を示すことができた
ChuckCottrill

クリスダウン、ファイル名の使用方法は機能しません。Qを編集しました。ご覧ください
ラビ

@Ravi mimetypesを使用する更新された回答を参照してください。
クリスダウン

最初のコマンドは、他の多くの(ビデオ以外の)ファイルも取得しています。たとえば、出力からの1行は次のとおりです。出力からの/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 それは私の目的を解決していません。
ラヴィ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.