web-dev-qa-db-ja.com

システム上のすべてのビデオファイルを見つけるにはどうすればよいですか?

Unityレンズファイル検索で*.*を使用し、Last Modified = All、Type = Videos、Size = Allでフィルタリングしようとしましたが、Picturesフォルダーに.3gpファイルがあることはわかっていますが、何も見つかりませんでした。ファイルシステムにマウントされた別のドライブにも多数のビデオファイルがあることを知っています。 可能性のある拡張子のリスト をコンパイルし、find ./ -name "* .ext" -o(etc、ad nauseum)でこれらを利用してfindコマンドの多数の反復を試みました。運がまったくありません。解決策は何ですか?

9
Elder Geek

代替: ファイル で検索:

Sudo find . -type f -exec file -N -i -- {} + | grep video

またはファイル名のみが必要な場合...

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

-N, --no-pad:ファイル名をパディングしない

-i, --mime:fileコマンドは、より伝統的な人間が読める形式ではなく、MIMEタイプの文字列を出力します。したがって、「text/plain; 「ASCIIテキスト」ではなくcharset = us-ascii '。このオプションが機能するために、ファイルはコマンド自体(多くのテキストファイルタイプ、ディレクトリなど)によって認識されるファイルの処理方法を変更し、代替の「マジック」ファイルを使用します。 (以下の「ファイル」セクションを参照してください)。


FILESセクションは以下を指します。

ファイル

/usr/share/misc/magic.mgcマジックのデフォルトのコンパイル済みリスト。

/usr/share/misc/magicデフォルトのマジックファイルを含むディレクトリ。


fileはslowwwwwwwwwwwwwwwwwです(検出されたすべてのファイルが開きます)が、これらすべてのエクステンションを追加する必要がないという利点があります。


Locateの使用:

locate *.mkv *.webm *.flv *.vob *.ogg *.ogv *.drc *gifv *.mng *.avi$ *.mov *.qt *.wmv *.yuv *.rm *.rmvb *.asf *.amv *.mp4$ *.m4v *.mp *.m?v *.svi *.3gp *.flv *.f4v
13
Rinzwind

これは1ライナーとして実行できると思いますが、少し面倒に思えたので、起動と編集を簡単にするスクリプトを作成してfindvids.shと呼びました。

注:ビデオファイルの種類については説明していませんALLが、ほとんどの種類があると確信しています。注目すべき例外の1つは、.mkvがプロジェクトのターゲット形式であり、既に処理されたファイルを見つける必要がないためです。式を最初と最後の引用符を維持しながらパターンを調べ、それに応じて調整することにより、ニーズに合わせてスクリプトに追加の形式(拡張)を追加するのは非常に簡単です。読み取り権限がないファイルは検出されないことに注意してください。

#!/bin/bash
#This script is intended to find virtually all video file formats.
find /. -type f | grep -E "\.webm$|\.flv$|\.vob$|\.ogg$|\.ogv$|\.drc$|\.gifv$|\.mng$|\.avi$|\.mov$|\.qt$|\.wmv$|\.yuv$|\.rm$|\.rmvb$|/.asf$|\.amv$|\.mp4$|\.m4v$|\.mp*$|\.m?v$|\.svi$|\.3gp$|\.flv$|\.f4v$"

コメントに基づいて編集する:拡張機能の最後にある$は、検索語が行末になければならないことを示します。代わりに行の先頭を一致させたい場合は、一致する用語の前に^を使用します。これらのアンカーについて詳しく説明しています こちら

Locateを使用して速度を比較しましたが、結果は次のとおりです。

time locate *.mkv *.webm *.flv *.vob *.ogg *.ogv *.drc *gifv *.mng *.avi *.mov *.qt *.wmv *.yuv *.rm *.rmvb *.asf *.amv *.mp4$ *.m4v *.mp *.m?v *.svi *.3gp *.flv *.f4v

real    0m8.887s
user    0m5.814s
sys 0m0.052s

vs.

time find /. -type f | grep -E "\.webm$|\.flv$|\.vob$|\.ogg$|\.ogv$|\.drc$|\.gifv$|\.mng$|\.avi$|\.mov$|\.qt$|\.wmv$|\.yuv$|\.rm$|\.rmvb$|/.asf$|\.amv$|\.mp4$|\.m4v$|\.mp4$|\.m?v$|\.svi$|\.3gp$|\.flv$|\.f4v$"

real    0m2.795s
user    0m0.657s
sys 0m1.115s

予期せず検索が高速です。このアプローチを使用します。

編集:さらなるテストは、別のマシンでのロケートが高速であることを示しています。私の初期の速度テストの結果は、キャッシュのために二段だったと思います。

ソース:

man find

man grep

https://stackoverflow.com/questions/7190565/unix-find-multiple-file-types

4
Elder Geek