findとmd5sumは出力を生成しません(find -olimit?)。

findとmd5sumは出力を生成しません(find -olimit?)。

とても理解できない状況に直面しました。再帰的に構造化されたバックアップファイルが複数あり、そのうち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

おすすめ記事