とても理解できない状況に直面しました。再帰的に構造化されたバックアップファイルが複数あり、そのうちmd5を計算しようとしています。追加のファイル拡張子を追加すると、出力は生成されず、プロセスは終了します(終了コード0)。
find . -type f -iname "*.3gp" -o -iname "*.avi" -o -iname "*.mov" -o -iname "*.mp4" -print0 | xargs -0 md5sum
find . -type f -iname "*.3gp" -o -iname "*.avi" -o -iname "*.mov" -o -iname "*.mp4" -o -iname "*.mpg" -print0 | xargs -0 md5sum
最初のものはうまくいきますが、2番目のものは出力を生成しません。 mpgファイルがないディレクトリでも試してみましたが、同じ動作でした。
検索するパラメータの数に制限はありますか?私はOSXを実行しており、Macportsからmd5sumをインストールしました。
追加情報
パイプに何か奇妙なことがあるようです。ファイル名のせいだと思いたいです。他のフォルダをさらに調査した結果、findコマンドが機能しているようで、129のビデオファイルがあり、そのうちの1つは.mpgでした。 find + md5sumを試みると、ファイルは1つだけ返されます。画像のみを含む別のフォルダで同様のコマンドを実行しましたが、正常に動作しました(80,000個のファイルが見つかり、80,000個のハッシュが生成されます)。
Pictures@2006$ find . -type f -iname "*.3gp" -o -iname "*.avi" -o -iname "*.mov" -o -iname "*.mp4" | wc -l
128
Pictures@2006$ find . -type f -iname "*.3gp" -o -iname "*.avi" -o -iname "*.mov" -o -iname "*.mp4" -o -iname "*.mpg" | wc -l
129
Pictures@2006$ find . -type f -iname "*.3gp" -o -iname "*.avi" -o -iname "*.mov" -o -iname "*.mp4" -o -iname "*.mpg" -print0 | xargs -0 md5sum
c21a78f2b2d5ca773b47647315ad91f8 ./pending photos/Video [%]/P007.MPG
Pictures@2006$
また、処理中の2番目のファイル名に句読点、プラス記号、および非ASCII文字が含まれていることも確認しました。ファイル名のためにエラーが発生した可能性がありますか?解決策はありますか?
/Esplai/+Nou/20060604 Dinar d'últim dia d'esplai[Barbacoa al torrent de l'Escaiola]/MVI_7702.AVI
ベストアンサー1
コマンドの演算子式がfind
使用されていない場合-o
(または)または-a
(そして-a
)、それらの間に暗黙の関係があります。そしてそれより-a
も密接に結合されている。-o
find . -type f -iname "*.3gp" -o -iname "*.avi" -o -iname "*.mov" \
-o -iname "*.mp4" -o -iname "*.mpg" -print0
次のように解析されます。
find . '(' -type f -a -iname "*.3gp" ')' -o -iname "*.avi" -o -iname "*.mov" \
-o -iname "*.mp4" -o '(' -iname "*.mpg" -a -print0 ')'
したがって、-print0
一致するファイル(およびディレクトリ!)のみが印刷されます*.mpg
。そのため、このコマンドを使用すると、予想される129ファイルではなく1つのファイルのみが処理されます。
括弧(シェルにも特別なので引用符で囲む)を使用してグループ化を変更できます。
find . -type f '(' -iname "*.3gp" -o -iname "*.avi" -o -iname "*.mov" \
-o -iname "*.mp4" -o -iname "*.mpg" ')' -print0 | xargs -0 md5sum