আনজিপ থেকে ইনপুট হিসাবে কীভাবে উইজেটের আউটপুট পুনর্নির্দেশ করবেন?


131

আমাকে এই লিঙ্কটি থেকে একটি ফাইল ডাউনলোড করতে হবে । ফাইল ডাউনলোডটি একটি জিপ ফাইল যা আমাকে বর্তমান ফোল্ডারে আনজিপ করতে হবে।

সাধারণত, আমি প্রথমে এটি ডাউনলোড করব, তারপরে আনজিপ কমান্ডটি চালাব।

$ wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zip
$ unzip temp.zip

তবে এইভাবে, আমাকে দুটি কমান্ড কার্যকর করতে হবে, পরেরটি কার্যকর করার জন্য প্রথমটির সমাপ্তির জন্য অপেক্ষা করতে হবে, এছাড়াও, ফাইলটি temp.zipদেওয়ার জন্য আমার অবশ্যই জেনে রাখা উচিত unzip

এটা আউটপুট পুনর্নির্দেশ করা সম্ভব wgetকরতে unzip? কিছুটা এইরকম

$ unzip < `wget http://www.vim.org/scripts/download_script.php?src_id=11834`

তবে এটি কার্যকর হয়নি।

বাশ:: wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zipঅস্পষ্ট পুনর্নির্দেশ

এছাড়াও, wgetদুবার মৃত্যুদন্ড কার্যকর করা হয়েছে এবং দুবার ফাইল ডাউনলোড করেছেন।


পরবর্তী উদাহরণে, উইজেট সম্ভবত দু'বার কার্যকর করা হয়েছিল কারণ? শেলের একটি বিশেষ চরিত্র। ইউআরএল "" এর মধ্যে রাখার সাহায্য করা উচিত।
p- স্থির

এই থ্রেডটির কোনও সমাধান রয়েছে বলে মনে হচ্ছে। যদিও নিজে চেষ্টা করে দেখিনি। serverfault.com/questions/26474/…

উত্তর:


96

আপনাকে আপনার ফাইলগুলি একটি অস্থায়ী ফাইলে ডাউনলোড করতে হবে, কারণ (আনজিপ ম্যান পৃষ্ঠাটি উদ্ধৃত করে):

স্ট্যান্ডার্ড ইনপুট থেকে পড়া সংরক্ষণাগারগুলি এখনও ফানজিপ ব্যতীত সমর্থিত নয় (এবং তারপরে কেবল সংরক্ষণাগারটির প্রথম সদস্যকেই তোলা যেতে পারে)।

কেবলমাত্র আদেশগুলি একত্রিত করুন:

wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zip; unzip temp.zip; rm temp.zip

তবে এটিকে আরও নমনীয় করার জন্য আপনাকে সম্ভবত এটি কোনও স্ক্রিপ্টের মধ্যে রেখে দেওয়া উচিত যাতে আপনি কিছু টাইপিং সংরক্ষণ করেন mktempএবং আপনার টেম্প ফাইলের জন্য নিরাপদ ফাইলের নাম তৈরি করতে আপনি কমান্ডটি ব্যবহার করতে পারেন এমন কোনওটি দুর্ঘটনাক্রমে ওভাররাইট না করে তা নিশ্চিত করার জন্য :

#!/bin/bash
TMPFILE=`mktemp`
PWD=`pwd`
wget "$1" -O $TMPFILE
unzip -d $PWD $TMPFILE
rm $TMPFILE

কি wget file.zip && unzip file.zipহিসাবে একই wget file.zip; unzip file.zipবা অন্য একজন বেশী প্রাধান্য হয়? ধন্যবাদ :)
জেগডসফট

7
উইগেট wget && unzipসফল হলে কেবলই এনেক্সটলোক আনজিপ চালাবে। wget ; unzipসম্ভবত আনজিপ চালানো হবে, সম্ভবত অস্তিত্বযুক্ত ফাইলের দিকে ইঙ্গিত করে।
temoto

ফানজিপটি উত্তরটি আমি খুঁজছিলাম। টেরাফর্ম (কোনও কারণে) প্যাকেজগুলি এটি একটি জিপ সংরক্ষণাগারে একক ফাইল হিসাবে বাইনারি তাই এটি আমার জন্য উপযুক্ত perfect
আসফান্দ কাজী

74

এটি আমার অনুরূপ প্রশ্নের জবাবের পুনঃপ্রবন্ধ :

জিপ ফাইল ফর্ম্যাটটিতে সংরক্ষণাগারটির শেষে একটি ডিরেক্টরি (সূচক) অন্তর্ভুক্ত রয়েছে। এই ডিরেক্টরিটি বলে যেখানে আর্কাইভের মধ্যে প্রতিটি ফাইল রয়েছে এবং এটি পুরো সংরক্ষণাগারটি না পড়ে দ্রুত, এলোমেলো অ্যাক্সেসের অনুমতি দেয়।

পাইপের মাধ্যমে একটি জিপ সংরক্ষণাগারটি পড়ার চেষ্টা করার সময় এটি কোনও সমস্যা হিসাবে দেখা দেবে, যাতে সূচিটি শেষ অবধি অ্যাক্সেস করা হয় না এবং ফাইলটি সম্পূর্ণরূপে পড়া না হওয়া অবধি পৃথক সদস্যদের সঠিকভাবে বের করা যায় না এবং আর উপলব্ধ না থাকে until । সংরক্ষণাগারটি যখন পাইপের মাধ্যমে সরবরাহ করা হয় তখন বেশিরভাগ জিপ ডিকম্প্রেসারগুলি কেবল ব্যর্থ হয় uns

সংরক্ষণাগারটির শেষে থাকা ডিরেক্টরিটি কেবলমাত্র স্থান নয় যেখানে ফাইল মেটা তথ্য সংরক্ষণাগারে সংরক্ষণ করা হয়। অতিরিক্ত হিসাবে, স্বতন্ত্র এন্ট্রিগুলিও অতিরিক্ত ফাইলের শিরোনামে অপ্রয়োজনীয় উদ্দেশ্যে এই তথ্য অন্তর্ভুক্ত করে।

যদিও প্রতিটি জিপ ডিকম্প্রেসর স্থানীয় ফাইল শিরোলেখ ব্যবহার করে না যখন সূচকটি অনুপলব্ধ থাকে, তারকোনা এবং সিপিও সামনের অংশটি লিবারচিভ (ওরফে বিএসডিটার এবং বিএসডিসিপিও) শেষ করতে পারে এবং পাইপের মাধ্যমে পড়ার সময় তা করতে পারে, যার অর্থ নিম্নলিখিতটি সম্ভব:

wget -qO- http://example.org/file.zip | bsdtar -xvf-

1
এটি দুর্দান্ত! আমি নোট করব যে টারটি আমাকে সঙ্কুচিত তথ্যের ভুল আকার (প্রত্যাশিত 0) হওয়া সম্পর্কে কিছু সতর্কতা দেয় তবে ফাইলগুলি নিজেরাই অকেজো হওয়া বলে মনে হয়। সূচকের অভাবের কারণেই এটি অনুমান করা।
Wyatt8740

1
আমার .zipএখানে একটি ফাইল রয়েছে যাতে এক্সিকিউটেবল অনুমতি সহ ফাইল থাকে। আমি যখন ডাউনলোড করে পাইপ পাই তখন bsdtarএক্সিকিউটি বিটগুলি ফেলে দেওয়া হয়। আমি যখন ডিস্কে ডাউনলোড করি এবং তার সাথে bsdtarবা unzipতার সাথে বের করি , এক্সিকিউট বিটগুলি সম্মানিত হয়।
গোলার র্যামব্লার

//, @ গোলারআম্বলার, কেন কখনও খুঁজে পেলেন না?
নাথান বাসানিজ

1
@ নাথানবাশানিজ: উত্তরটি এখানে । সংক্ষেপে: একটি জিপ সংরক্ষণাগারটিতে দুটি জায়গা রয়েছে যেখানে এটি এই জাতীয় তথ্য সঞ্চয় করে, এটি বেমানান হতে পারে এবং ফাইলটি bsdtarখোলা আছে কিনা তা নির্ভর করে এবং এটি এক বা অন্য জায়গা ব্যবহার করে।
গোলার র‌্যামব্লার

20

আপনি যদি জেডিকে ইনস্টল করেন তবে আপনি এটি ব্যবহার করতে পারেন jar:

wget -qO- http://example.org/file.zip | jar xvf /dev/stdin

3
আমি সবেমাত্র পেয়েছি যে jarফাইল অনুমতি সংরক্ষণ করে না। অন্যথায় ভাল কৌশল।
ফোনেহেহে

7
আপনার কোনও ফাইল | jar xv
প্যারাম

15

আমি মনে করি না আপনি এমনকি পাইপিং উইজেটের আউটপুট আনজিপ-এ বিরক্ত করতে চান।

উইকিপিডিয়া "জিপ (ফাইল ফর্ম্যাট)" নিবন্ধ থেকে:

একটি জিপ ফাইল ফাইলের শেষে অবস্থিত একটি কেন্দ্রীয় ডিরেক্টরি উপস্থিতি দ্বারা চিহ্নিত করা হয়।

আনজিপ কোনও কাজ করতে পারার আগে উইজেটকে ডাউনলোড সম্পূর্ণরূপে শেষ করতে হবে, সুতরাং এগুলি ক্রমানুসারে চালিত হয়, যেমন কেউ ভাবেন তেমন আন্তঃনির্মিত হয় না।


10

সঠিক বাক্য গঠনটি হ'ল:

$ unzip <(curl -sL https://www.winpcap.org/archive/1.0-docs.zip)

কিন্তু এটি কাজ করবে না, ত্রুটি (কারণ ইনফো-জিপ উপর ডেবিয়ান ):

lseek(3, 0, SEEK_SET)                   = -1 ESPIPE (Illegal seek)

Archive:  /dev/fd/63
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of /dev/fd/63 or
        /dev/fd/63.zip, and cannot find /dev/fd/63.ZIP, period.

বা বিএসডি / ওএস এক্স এ:

Trying to read large file (> 2 GiB) without large file support

এটি হ'ল কারণ কেন্দ্রীয় জিপ সরঞ্জামগুলি মূলত কেন্দ্রীয় ডিরেক্টরি রেকর্ডের শেষটি পড়তে ফাইলটি অফসেট সেট করার জন্য মূলত lseekফাংশন ব্যবহার করে । এটি সংরক্ষণাগার কাঠামোর শেষে অবস্থিত এবং এটি ফাইলগুলির তালিকা পড়তে হবে (দেখুন: জিপ ফাইল ফর্ম্যাট কাঠামো )। সুতরাং ফাইলটি ফিফো, পাইপ, টার্মিনাল ডিভাইস বা অন্য কোনও গতিশীল হতে পারে না, কারণ ইনপুট অবজেক্টটি ফাংশন দ্বারা অবস্থান করতে পারে না ।lseek

সুতরাং আপনার নীচের কাজগুলি রয়েছে:

  • বিভিন্ন ধরণের সংকোচনের (যেমন tar.gz) ব্যবহার করুন,
  • আপনাকে দুটি পৃথক কমান্ড ব্যবহার করতে হবে,
  • বিকল্প সরঞ্জামগুলি ব্যবহার করুন (যেমন অন্যান্য উত্তরে পরামর্শ দেওয়া হয়েছে),
  • একাধিক কমান্ড ব্যবহার করার জন্য একটি নাম বা ফাংশন তৈরি করুন।

আমি এখনও এটি একটি ফিফোর হতে পারে বলে মনে করি । আপনাকে কেবল ইওএফ পর্যন্ত ফিফো থেকে পড়া চালিয়ে যেতে হবে (কার্যকরভাবে পুরো ফিফোর স্মৃতিতে বা কোনও টেম্পল ফাইলে বাফারিং)। স্ক্রিপ্ট তৈরি সহজ করতে মোটামুটিভাবে কার্যক্ষম, তবে খুব দরকারী নয়।
ইভান ক্যারল

8

এর রিপোস্ট করুন আমার উত্তর :

ব্যস্তবক্স স্টিন unzipনিতে এবং সমস্ত ফাইলগুলি বের করতে পারে।

wget -qO- http://downloads.wordpress.org/plugin/akismet.2.5.3.zip | busybox unzip -

ড্যাশ পরে unzipস্ট্যান্ডিন ইনপুট হিসাবে ব্যবহার করা হয়।

আপনি এমনকি করতে পারেন,

cat file.zip | busybox unzip -

তবে এটি কেবল অপ্রয়োজনীয় unzip file.zip

যদি আপনার ডিস্ট্রো ডিফল্টরূপে ব্যাসিবক্স ব্যবহার করে (যেমন আলপাইন), কেবল চালান unzip -


খুব দরকারী কৌশল, ধন্যবাদ!
ব্রাইস

-1

এটি আমার পক্ষে বেশ ভালভাবে কাজ করে:

tar xvf <(curl -sL http://www.vim.org/scripts/download_script.php?src_id=11834)

jar xvf <(curl -sL http://www.vim.org/scripts/download_script.php?src_id=11834)

wget -qO- http://www.vim.org/scripts/download_script.php?src_id=11834 | tar xvf -

wget -qO- http://www.vim.org/scripts/download_script.php?src_id=11834 | jar xvf -
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.