私はstrings
抽出を使用し、ディレクトリ間のファイルバージョンを比較しました。
これを再帰的に実行することはできないようです。
各ファイルに使用する方法は次のとおりです。
strings -e l FILENAME.exe | sed -e :a -e '/FileVersion$/N; s/FileVersion\n/FileVersion /; ta' | grep FileVersion | cut -d ' ' -f 2
ファイル名を削除して*に変更すると機能します。ただし、ファイル名ではなくファイルのバージョンのみがわかります。 -F を含めると、文字列のファイル名が提供されます。
ただし、ファイル名とバージョン番号のみを収集するようにSed / Grepをフォーマットする方法は理解できません。
答え1
で終わる行を印刷したいように聞こえるFileVersion
ので、問題になります。
strings -f -e l -- *.exe | sed -n '/FileVersion$/{n;p;}'
答え2
次のことができます。
strings -e l -f FILENAME.exe | sed -n -e :a -e '/FileVersion$/,/.*/{/FileVersion$/d;/.*/p}'
これにより、sedがpで指示した以外の「-n」行を印刷しないようになります。次に、FileVersionで終わる行と次のパターンを見つけるように指示します。終了パターンは.*なので、次の行と一致します:).次に、FileVersion 行を削除し、バージョンを含める残りの部分を印刷するように指示します。 :)
答え3
これはcutとsedの使い方を正しく理解していません。
裏地を少し調整します。
strings -f -e l *.exe | sed -e :a -e '/FileVersion$/N; s/FileVersion\n/FileVersion /; ta' | grep FileVersion | sed 's/.*FileVersion//'
したがって、文字列はファイル名に-fを使用し、必要なファイル情報に-eを使用します。
ファイルバージョンを削除して維持するためのsed
次に、grepを介して画面上でその情報を見つけます。
最後の sed は Fileversion の前にコンテンツを削除します。 (これは正しい方法ではありません。sedのパターンを理解するのは複雑です。)
sed 's/.*FileVersion//'
誰もがsedの正しい形式を投稿したい場合は、喜んで更新します。残念ながら、sedのパターンと理解は完全には理解されていません。