나는 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의 패턴과 이해는 완전히 이해되지 않았습니다.