বাশ ব্যবহার করে জআআআআআআআর থেকে MANIFEST.MF ফাইলটি কীভাবে পড়বেন


উত্তর:


158
$ unzip -q -c myarchive.jar META-INF/MANIFEST.MF
  • -q আনজিপ প্রোগ্রাম থেকে ভার্বোজ আউটপুট দমন করবে
  • -c stdout থেকে নিষ্কাশন করা হবে

উদাহরণ:

$ unzip -q -c commons-lang-2.4.jar META-INF/MANIFEST.MF

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 1.5.0_13-119 (Apple Inc.)
Package: org.apache.commons.lang
Extension-Name: commons-lang
Specification-Version: 2.4
Specification-Vendor: Apache Software Foundation
Specification-Title: Commons Lang
Implementation-Version: 2.4
Implementation-Vendor: Apache Software Foundation
Implementation-Title: Commons Lang
Implementation-Vendor-Id: org.apache
X-Compile-Source-JDK: 1.3
X-Compile-Target-JDK: 1.2

বিকল্পভাবে আপনি এর -pপরিবর্তে ব্যবহার করতে পারেন -q -c

-p পাইপ থেকে ফাইল এক্সট্রাক্ট (stdout)। স্ট্যান্ডআউটে ফাইলের ডেটা পাঠানো ছাড়া আর কিছুই হয় না এবং ফাইলগুলি সর্বদা বাইনারি ফর্ম্যাটে সঞ্চিত হয় ঠিক যেমন সেগুলি সঞ্চিত হয় (কোনও রূপান্তর নেই)।


4
আমি জানি যে এই থ্রেডটি পুরানো, তবে যার জন্য এটি উদ্বিগ্ন হতে পারে: ম্যানুয়াল হিসাবে, -p বা -c ব্যবহার করে এক্সট্র্যাক্ট করা বাইনারি আকারে আউটপুট প্রিন্ট করবে। যদি আপনার এই আউটপুটটি কোনওভাবে পার্স করার প্রয়োজন হয় (উদাহরণস্বরূপ অ্যা্যাসোসিয়েটিভ অ্যারে), আপনার সঠিক পাঠ্য পাঠের উপস্থাপনাটি -a আর্গুমেন্ট দিয়ে জোর করা উচিত।
tcigler

19

ব্যবহার unzip:

$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF

যা নিঃশব্দে ( -q) জারফাইল (যা জিপ ফর্ম্যাটটি দিয়ে সংকুচিত করা হয়) থেকে স্টাডআউট () -র দিকে META-INF / MANIFEST.MF পাথটি পড়বে -c) এরপরে 'এই জারের মূল শ্রেণিটি কী কী: এমন প্রশ্নের উত্তর দিতে আপনি অন্য কমান্ডের আউটপুটটি পাইপ করতে পারেন:

$ unzip -q -c $JARFILE_PATH META-INF/MANIFEST.MF | grep 'Main-Class' | cut -d ':' -f 2

(এটি স্ট্রিং না থাকা সমস্ত লাইন সরিয়ে দেয় Main-Class, তারপরে :কেবল দ্বিতীয় ক্ষেত্র, শ্রেণীর নাম রেখে লাইনটি বিভক্ত করে )। অবশ্যই, হয় $JARFILE_PATHযথাযথভাবে সংজ্ঞা দিন বা $JARFILE_PATHআপনার আগ্রহী জারফিলের পথটি প্রতিস্থাপন করুন ।


4

আপনার বিতরণের উপর নির্ভর করে unzipপ্যাকেজটি ইনস্টল করুন । তারপরে সহজভাবে ইস্যু করুন

unzip -p YOUR_FILE.jar META-INF/MANIFEST.MF

এটি সামগ্রীগুলি STDOUT এ ফেলে দেবে।

এইচটিএইচ


1

অন্যরা গ্রাহক বা জাঁকজমক থেকে মুক্ত করার জন্য আনজিপ-পি ব্যবহার এবং পাইপিং বা আপনার যা যা প্রয়োজন তা পোস্ট করছেন। যদিও এটি বেশিরভাগ ক্ষেত্রে কাজ করে, এটি লক্ষণীয় যে MANIFEST.MF- এর প্রতি-লাইন 72 অক্ষরগুলির কারণে আপনি কীগুলির জন্য গ্রেপিং করতে পারেন যার মানগুলি একাধিক লাইনে বিভক্ত হয়ে গেছে এবং সুতরাং পার্স করা খুব কঠিন হবে। আমি এমন একটি সি এল এল সরঞ্জাম দেখতে পছন্দ করব যা ফাইলের বাইরে একটি রেন্ডার মানকে টানতে পারে।

http://delaltctrl.blogspot.com/2009/11/manifestmf-apparently-you-are-just.html


আমি একটি গ্রোভি স্ক্রিপ্টের সাথে একটি উত্তর যুক্ত করেছি যা রেন্ডার কী / মান জোড়গুলি পেতে এবং মুদ্রণের জন্য জাভা এর এপিআই ব্যবহার করে, পাশাপাশি এটির জন্য ব্যাশ-বান্ধব ওয়ান-লাইনার ব্যবহার করে।
ctrueden

1

$ tar xfO some.jar META-INF/MANIFEST.MF

xএক্সট্রাক্ট এবং Ostdout পুনর্নির্দেশ।

দ্রষ্টব্য: জিএনইউ টারে নয়, কেবল বিএসডিটারে কাজ করছেন বলে মনে হচ্ছে।


0

নিম্নলিখিত গ্রোভী লিপিটি জাভির API টি ম্যানিফেস্টকে পার্স করতে ব্যবহার করে, ম্যানিফেস্টের ফর্ম্যাটটির অদ্ভুত লাইন ব্রেকিংয়ের সাথে সমস্যাগুলি এড়িয়ে চলে:

#!/usr/bin/env groovy
for (arg in args) {
  println("[$arg]")
  jarPath = new java.io.File(arg).getAbsolutePath()
  jarURL = new java.net.URL("jar:file:" + jarPath + "!/")
  m = jarURL.openConnection().getManifest()
  m.getMainAttributes().each { k, v -> println("$k = $v") }
}

যুক্তি হিসাবে JAR ফাইলগুলি পাস করুন:

$ groovy manifest.groovy ~/.m2/repository/junit/junit/4.13/junit-4.13.jar
[/Users/curtis/.m2/repository/junit/junit/4.13/junit-4.13.jar]
Implementation-Title = JUnit
Automatic-Module-Name = junit
Implementation-Version = 4.13
Archiver-Version = Plexus Archiver
Built-By = marc
Implementation-Vendor-Id = junit
Build-Jdk = 1.6.0_65
Created-By = Apache Maven 3.1.1
Implementation-URL = http://junit.org
Manifest-Version = 1.0
Implementation-Vendor = JUnit

বা যদি আপনি ওয়ান লাইনারের জন্য মরিয়া হন:

groovy -e 'new java.net.URL("jar:file:" + new java.io.File(args[0]).getAbsolutePath() + "!/").openConnection().getManifest().getMainAttributes().each { k, v -> println("$k = $v") }' ~/.m2/repository/junit/junit/4.13/junit-4.13.jar
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.