জিজিপকে দ্বন্দ্বের কারণে ফাইলগুলি ওভাররাইট না করার জন্য জোর করার কোনও উপায় আছে কি?


17

আমি একটি স্ক্রিপ্ট লিখছি যেখানে আমি ফাইলগুলি জিপ করছি।

এমন একটি সম্ভাবনা রয়েছে যে আমি কোনও ফাইল জিপ করতে পারি, একই নামের একটি ফাইল তৈরি করতে পারি এবং এটিকেও জিপ করার চেষ্টা করতে পারি, যেমন

$ ls -l archive/
total 4
-rw-r--r-- 1 xyzzy xyzzy  0 Apr 16 11:29 foo
-rw-r--r-- 1 xyzzy xyzzy 24 Apr 16 11:29 foo.gz

$ gzip archive/foo
gzip: archive/foo.gz already exists; do you wish to overwrite (y or n)? n   
    not overwritten

ব্যবহার করে gzip --force, আমি জিজিপকে ওভাররাইট করতে বাধ্য করতে পারি foo.gz, তবে এই ক্ষেত্রে, আমি মনে করি যে ওভাররাইট করলে আমার ডেটা হারাতে পারে এমন একটি ভাল সম্ভাবনা রয়েছে foo.gz। জিজিপকে .gzএকা ফাইল ছেড়ে দিতে বাধ্য করার জন্য একটি কমান্ড লাইন সুইচ বলে মনে হচ্ছে না ... প্রম্পটে 'n' চাপার একটি অ-ইন্টারেক্টিভ সংস্করণ।

আমি চেষ্টা করেছিলাম gzip --noforceএবং gzip --no-forceএই আশায় যে এগুলি জিএনইউ বিকল্পগুলির মান অনুসরণ করতে পারে তবে এগুলির কোনওটিই কার্যকর হয়নি।

এর জন্য কি কোনও সোজা এগিয়ে কাজ আছে?

সম্পাদনা:

দেখা যাচ্ছে যে এটি ম্যান পৃষ্ঠার চেয়ে তথ্য পৃষ্ঠাটি পড়ার জন্য একবারে অর্থ প্রদান করে।

তথ্য পৃষ্ঠা থেকে:

`--force'
`-f'
     Force compression or decompression even if the file has multiple
     links or the corresponding file already exists, or if the
     compressed data is read from or written to a terminal.  If the
     input data is not in a format recognized by `gzip', and if the
     option `--stdout' is also given, copy the input data without
     change to the standard output: let `zcat' behave as `cat'.  If
     `-f' is not given, and when not running in the background, `gzip'
     prompts to verify whether an existing file should be overwritten.

ম্যান পৃষ্ঠাটি পাঠ্যটি অনুপস্থিত ছিল এবং কখন পটভূমিতে চলছে না

পটভূমিতে চলাকালীন, gzip প্রম্পট করবে না এবং -fঅপশনটি না চাওয়া হলে ওভাররাইট করা হবে না ।


3
আমি নিশ্চিত না যে কীভাবে জিজিপ ব্যাকগ্রাউন্ড হওয়ার জন্য চেক করে, তবে যে সিস্টেমে আমি কাজ করছি তাতে '&' যোগ করা এটি করে না। পাইপের ওপারে থাকা বলে মনে হচ্ছে, যদিও find ./ ! -name "*gz" -exec gzip {} \; &find ./ ! -name "*gz" -print0 | xargs -0 -n 1 -t gzipgzip: ./2012-July.txt.gz already exists; not overwritten
এটির

1
@ বিলম্যাকগোনিলে আপনার মন্তব্যটি উত্তর হওয়া উচিত!
রক্যালাইট

উত্তর:


9

এটি আমার উপর ছড়িয়ে পড়েছে যে অনাকাঙ্ক্ষিত প্রভাব এড়ানোর সর্বোত্তম উপায় হ'ল প্রোগ্রামটিকে অনাকাঙ্ক্ষিত প্রভাব সম্পাদন করতে না বলা । এটি হ'ল ফাইলটি সংকোচিত আকারে ইতিমধ্যে উপস্থিত থাকলে কেবল কোনও ফাইলকে সংকোচন করতে বলবেন না।

উদাহরণ:

if [ ! -f "$file.gz" ]; then 
    gzip "$file"; 
else 
    echo "skipping $file"
fi

বা আরও সংক্ষিপ্ত ( trueযদি একটি ফাইল.gz থাকে তবে চালান, অন্যথায় ফাইলকে সংক্ষেপ করুন)

[ -f "$file.gz" ] && echo "skipping $file" || gzip "$file"    

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

আপনি পার্লে একটি ফাইল পোক করতে পারেন ...
Ярослав r

1
আপনি কী বলতে চাইছেন তা আমি পরিষ্কার করছি না poke a file
বার্টন চিত্তেনডেন

আমেরিকান ইংরেজিতে প্রতিদিনের যোগাযোগের ক্ষেত্রে অ্যাসোসিয়েশন / চিত্রের ব্যবহারের অভাব আমাকে প্রতিবার বিস্মিত করে :) আমাকে চেষ্টা করে ব্যাখ্যা করার সুযোগ দিন। কোনও শিশু একটি লাঠি দিয়ে মরা কাককে পোঁচাচ্ছে এমন একটি চিত্র জেনে নিন এটি বেঁচে আছে কি না তা দেখার জন্য। এখানে গুণাবলী অনুসন্ধানের জন্য পোकिंग ব্যবহার করা হয় । একইভাবে, একটি ফাইল খোঁচা এটা সম্পর্কে কিছু চেক করতে, যেমন অর্থ হবে যদি এটি সব বর্তমান রয়েছে। যাহা হউক, আমি মনে খোঁচা আইন উচিত এ অন্ততপক্ষে গড় "বাহ্য বস্তুর সঙ্গে যোগাযোগ সাধা" , এবং যে বলতে যথেষ্ট "একটি ফাইল সম্পর্কে কিছু তথ্য পেতে" এর পরিবর্তে এটি আউট বানান এ কোন চিত্র।
Рахматуллин

"পোকে" হ'ল মেমরির অবস্থান নির্ধারণের জন্য হ্যাকার স্লেং হয়। দেখুন: en.wikedia.org/wiki/PEEK_and_POKE#
জেনেরিক_উসেজ_ও_২২ পোক

12

আমি একক কমান্ডের নিকটতম জিনিসটি খুঁজে পেতে পারি:

yes n | gzip archive/foo

yesকমান্ড কপি করে প্রিন্ট yপর্যন্ত এটি একটি সংকেত পায় একটি লাইনফীড দ্বারা অনুসরণ stdout- এ। যদি তার কোনও যুক্তি থাকে তবে এটি পরিবর্তে এটি মুদ্রণ করবে y। এই ক্ষেত্রে, এটি ngzip প্রস্থান না হওয়া পর্যন্ত মুদ্রণ করে , এভাবে পাইপটি বন্ধ করে দেওয়া হয়।

এটি nকীবোর্ডে বারবার প্রবেশের সমতুল্য ; এটি স্বয়ংক্রিয়ভাবে প্রশ্নের উত্তর দেবেgzip: archive/foo.gz already exists; do you wish to overwrite (y or n)?

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


1
এই সঙ্গে অন্য বিরক্তি যে gzipপ্রস্থানের2
স্টিভেন পেনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.