কমান্ড লাইন থেকে আমি কীভাবে একটি ফাইল সংক্ষিপ্ত করতে পারি?


9

আমার কাছে একটি 150 গিগাবাইট এক্সএমএল ফাইল রয়েছে যা আমি প্রায় 1 গিগাবাইটে সংক্ষিপ্ত করে (অর্থাত্ কাটা কাটা) করতে চাই - এখানে কি একটি সাধারণ (বাশ বা অনুরূপ) কমান্ড ব্যবহার করতে পারি, বা আমাকে প্রোগ্রামিক রুটে যেতে হবে (এটি vi বা emacs এ সম্পাদনা করতে হবে) এমনকি বড় আয়রন সিস্টেমে কি দুঃস্বপ্ন দেখা যায়)?

(আমি তথ্যের ক্ষয়ক্ষতি সম্পর্কে স্পষ্টতই উদ্বিগ্ন নই, আমি একটি সংক্ষিপ্ত ফাইল চাই যাতে আমি এটিতে একটি সফ্টওয়্যারের টুকরো পরীক্ষা করতে পারি এবং উত্তরের জন্য বেশ কয়েক ঘন্টা অপেক্ষা না করি, একটি সংক্ষিপ্ত ফাইল আমাকে তা করতে দেয়))


1
আপনি কি বোঝাতে চেয়েছেন যে আপনি ফাইলটি কেটে ফেলতে চান, বা আপনি ফাইলটি জুড়ে তথ্য সরাতে চান?
এএফএইচ

1
এটি এসও-তে পাওয়া গেছে; stackoverflow.com/a/15934078/2800918
সিএবি

2
যেহেতু এটি একটি এক্সএমএল ফাইল, যা আমি ধরে নিয়েছি যে এটি একটি বিশাল সংখ্যক উপাদানগুলির সাথে একটি ক্রম ধারণ করে, আপনি এক্সকিরির মতো একটি এক্সএমএল রূপান্তর ভাষাও ব্যবহার করতে পারেন এই উপাদানগুলির একটি নির্দিষ্ট সংখ্যক ফিল্টার আউট করার জন্য, যা বৈধ এক্সএমএল আউটপুট দেওয়ার সুবিধা পাবে ( উদাহরণ )
হারুন

4
ফাইলটি শেষ হয়ে গেলে কী এখনও বৈধ এক্সএমএল হওয়া দরকার?
জো

1
না, আমি কেবল এটি প্যাচ করেছিলাম তাই এটি ছিল
অ্যাড্রিয়ানম্যাসেমিনাম

উত্তর:


15

ধরে নিই যে আপনি 150 জিবি ফাইলের প্রথম 1 জিবি ছাঁটাই করতে এবং বের করতে চান:

সহ head:

head -c 1G infile > outfile

নোট করুন যে Gপ্রত্যয়টি GB1024 এর পরিবর্তে 1000 এ প্রান্তিককরণের সাথে প্রতিস্থাপিত হতে পারে ।

বা সাথে dd:

dd if=infile of=outfile bs=1M count=1024

অথবা উইম্পাস কিউ-এর মতোই উইম্বলির উত্তর, ddজায়গায় ছাঁটাই করতে পারে।


5
এটি সম্পন্ন হওয়ার পরে সম্ভবত পঠনযোগ্য এক্সএমএল ফাইলের ফল হবে না।
জো 21

3
@ জো - ওপি একটি পঠনযোগ্য ফাইলের জন্য অনুরোধ করেনি (না তারা এও বলেছে যে এটি অপঠনযোগ্য হতে পারে)। তারা বলেছিল যে তারা তথ্য হারাতে পারে না। আমি কীভাবে ফাইলটি ঠিক করবেন সে সম্পর্কে ওপি থেকে একটি নতুন প্রশ্ন আশা করব।
কেভিনডিটাইম

3
আমি ঠিক করতে যথেষ্ট এক্সএমএল জানি, আমি ফর্ম্যাটের জন্য ডিটিডি লিখেছি!
অ্যাড্রিয়ানমেকেনামিন

37

1 গিগাবাইটে কোনও ফাইল কেটে ফেলতে, truncateকমান্ডটি ব্যবহার করুন :

truncate -s 1G file.xml

ছাঁটাইয়ের ফলাফল সম্ভবত কোনও বৈধ এক্সএমএল ফাইল হবে না তবে আমি জড় করেছি যে আপনি এটি বুঝতে পেরেছেন।

এর গনুহ সংস্করণের জন্য ডকুমেন্টেশন truncateহয় এখানে এবং ডকুমেন্টেশন জন্য বাসদ সংস্করণ এখানে


14

যেখানে সম্ভব, আমি জন truncate1024 এর উত্তরের মতো কমান্ডটি ব্যবহার করব । এটি কোনও স্ট্যান্ডার্ড ইউনিক্স কমান্ড নয়, তবে কোনও দিন আপনি এটি ব্যবহার করতে অক্ষম হতে পারেন। সেক্ষেত্রে, ddখুব একটি ইন-জায়গা ছাঁটাই করতে পারেন।

ddডিফল্ট আচরণটি হ'ল অনুলিপি ফাইলটি যেখানে অনুলিপিটি শেষ হয় সেই স্থানে কাটা, সুতরাং আপনি কেবল এটি 0-দৈর্ঘ্যের ইনপুট ফাইলটি দিন এবং পছন্দসই কাটা পয়েন্টে লেখা শুরু করতে বলুন:

dd if=/dev/null of=filename bs=1048576 seek=1024

(এটি ddমাল্টিথর 3 এট 3 ডি এর উত্তরের অনুলিপি এবং কাটকের মতো নয়))

নোট করুন যে আমি 1048576 এবং 1024 ব্যবহার করেছি কারণ 1048576 * 1024 কাঙ্ক্ষিত আকার। আমি এড়িয়ে চলা BS = 1 মি কারণ এই একটি "বহনযোগ্যতা" উত্তর, এবং ক্লাসিক ddশুধুমাত্র প্রত্যয় জানে k, bএবং w


2
সাধারণ সমাধানের জন্য, আপনার সম্ভবত লক্ষ্য করা উচিত যে bsসংখ্যার দ্বারা গুণিত seekসংখ্যাটি বাইটের সংখ্যা রাখতে হবে। যে সীমাবদ্ধতা পূরণ করে এমন কোনও দুটি সংখ্যা কাজ করা উচিত; যেমন, bs=1073741824 seek=1বা bs=1 seek=1073741824। বা, যেহেতু bs512-এ খেলাপি ডিফল্ট, একাও seek=2097152কাজ করা উচিত। এবং আপনার মত স্বরলিপি ব্যবহার করতে পারেন 1M, 1K, 1Gএবং 2M
জি-ম্যান

1

আপনি কী জিজ্ঞাসা করছেন তা আমি পুরোপুরি নিশ্চিত নই। আপনি কি কেবল অন্য 149 জিবি থেকে মুক্তি পেতে চান বা আপনি 150 জিবি 1 জিবিতে সংক্ষেপণের চেষ্টা করছেন? নির্বিশেষে, এটি এটি কার্যকর করার জন্য একটি দরকারী পদ্ধতি হতে পারে।

splitকমান্ড একাধিক টুকরা যেকোনো ফাইল বিভক্ত করতে পারেন। মানুষ বিভক্ত দেখুন । আপনি যে ফাইল ফাইলটিকে এটিকে -bঅপশনে ভাগ করতে চান তার আকার নির্দিষ্ট করতে পারেন specify এই ক্ষেত্রে:

$ বিভক্ত-বি 1 জিবি myfile.xml

অন্য কোনও বিকল্প ছাড়াই এটি অক্ষর দিয়ে শুরু করে বর্তমান ডিরেক্টরিতে বেশ কয়েকটি ফাইল তৈরি করা উচিত x। আপনি যদি বিভক্ত ফাইলগুলির নাম সামঞ্জস্য করতে চান তবে ম্যান পৃষ্ঠাটি দেখুন।

ফাইলটি পুনরায় একত্রিত করতে কেবল ব্যবহার করুন cat * > re-assembled.xml

উদাহরণ:

[kent_x86.py@c7 split-test]$ ls -l opendocman*
-rw-rw-r--.  1 kent_x86.py kent_x86.py 2082602 Mar 31  2017 opendocman-1.3.5.tar.gz

[kent_x86.py@c7 split-test]$ split -b 100K opendocman-1.3.5.tar.gz 
[kent_x86.py@c7 split-test]$ ls
opendocman-1.3.5.tar.gz  xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj  xak  xal  xam  xan  xao  xap  xaq  xar  xas  xat  xau
[kent_x86.py@c7 split-test]$ ll
total 4072
-rw-rw-r--. 1 kent_x86.py kent_x86.py 2082602 Jan  5 11:06 opendocman-1.3.5.tar.gz
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xaa
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xab
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xac
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xad
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xae
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xaf
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xag
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xah
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xai
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xaj
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xak
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xal
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xam
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xan
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xao
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xap
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xaq
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xar
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xas
-rw-rw-r--. 1 kent_x86.py kent_x86.py  102400 Jan  5 11:06 xat
-rw-rw-r--. 1 kent_x86.py kent_x86.py   34602 Jan  5 11:06 xau
[kent_x86.py@c7 split-test]$ cat xa* > opendoc-reassembled.tar.gz
[kent_x86.py@c7 split-test]$ ls -l opendoc-reassembled*
-rw-rw-r--. 1 kent_x86.py kent_x86.py 2082602 Jan  5 11:07 opendoc-reassembled.tar.gz


0

শেষ পর্যন্ত আমি কেবল sedএকটি স্বেচ্ছাসেবী সংখ্যক লাইন উত্তোলন করতাম :

sed -n 1,1000000p infile.xml>outfile.xml

1
এটি প্রশ্নের উত্তর দেয় কিনা বা না রেখে, এটি পুরো ফাইলটি স্ক্যান করে দেবে, আমি বিশ্বাস করি, সুতরাং এটি ব্যবহার করা আরও বেশি দক্ষ sed 1000000q(এবং আরও কিছুটা কমপ্যাক্ট, দৃষ্টিতে কথা বলা)।
বি লেয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.