কমান্ড শেলের মধ্যে x টি ফাইলের নকল করুন


22

লুপের জন্য একটি লুপ ব্যবহার করে আমি কমান্ড লাইন থেকে x বারে একটি ভিডিও ফাইলের সদৃশ করার চেষ্টা করি, আমি এটি এর মতো চেষ্টা করেছি, তবে এটি কার্যকর হয় না:

for i in {1..100}; do cp test.ogg echo "test$1.ogg"; done

5
আপনার একমাত্র ত্রুটি নয় echoযা সেখানে থাকার কথা নয়, আর $1যা হওয়া উচিত $i?
জুলি পেলেটিয়ার

যদি আমি প্রতিধ্বনি সরান এবং কেবল ব্যবহার করি test$1.oggতবে এটি বলে: test.ogg এবং test.ogg একই ফাইল , তাই দেখে মনে হচ্ছে? 1 স্বীকৃত নয়?
কালো

@ অ্যাডওয়ার্ড ব্ল্যাক: মনে হচ্ছে আপনার প্রয়োজনীয়তাগুলি আমি ভুল বুঝেছি। সমাধানটি উপযুক্ত নয়।
cuonglm

@ জুলিপ্লেটিয়ার, জঘন্য, মাঝে মাঝে আমার সাথে ঘটে যায় যে আমি যথাযথভাবে লেখার $1পরিবর্তে লিখি $i, এটি সকালে আর্লি, দুঃখিত ... ধন্যবাদ! আমি $xভবিষ্যতে$i
কালো

উত্তর:


25

আপনার শেল কোডটিতে দুটি সমস্যা রয়েছে:

  1. সেখানে echoথাকা উচিত নয়।
  2. গন্তব্য ফাইলের নামের $iমতো ভেরিয়েবলটি ভুল টাইপ করা $1হয়।

ফাইলটি একই ডিরেক্টরিতে কোনও ফাইলের অনুলিপি তৈরি করতে, ব্যবহার করুন

cp thefile thecopy

আপনি যদি সেখানে কিছু inোকান, উদাহরণস্বরূপ

cp thefile theotherthing thecopy

তারপরে ধরে নেওয়া হয় যে আপনি অনুলিপি করতে চান thefileএবং ডাকা ডিরেক্টরিটিতেtheotherthing প্রবেশ করতে চান ।thecopy

আপনার ক্ষেত্রে, এটি বিশেষত কল করা ফাইল test.oggএবং echoডিরেক্টরিটিতে অনুলিপি করার জন্য একটি ফাইল সন্ধান করে test$1.ogg

$1সম্ভবত একটি খালি স্ট্রিং প্রসারিত হবে। এই কারণেই, আপনি echoকমান্ড থেকে মুছলে আপনি "test.ogg এবং test.ogg একই ফাইল" পাবেন; কার্যকর করা কমান্ড মূলত

cp test.ogg test.ogg

এটি সম্ভবত একটি ভুল টাইপ।

শেষ পর্যন্ত, আপনি এই জাতীয় কিছু চান:

for i in {1..100}; do cp test.ogg "test$i.ogg"; done

বা, বিকল্প হিসাবে

i=0
while (( i++ < 100 )); do
  cp test.ogg "test$i.ogg"
done

বা, ব্যবহার করে tee:

tee test{1..100}.ogg <test.ogg >/dev/null

দ্রষ্টব্য: এটি সম্ভবত 100 টি অনুলিপিগুলির জন্য কাজ করবে তবে হাজার হাজার অনুলির জন্য এটি "যুক্তি তালিকা খুব দীর্ঘ" ত্রুটি তৈরি করতে পারে। সেক্ষেত্রে একটি লুপ ব্যবহার করে ফিরে আসুন।


12

সংক্ষিপ্ত এবং সুনির্দিষ্ট

< test.ogg tee test{1..100}.ogg

বা আরও ভাল করতে

tee test{1..100}.ogg < test.ogg >/dev/null

দেখতে টী বর্ণের নাম কমান্ড ব্যবহার আরো সহায়তার জন্য।

হালনাগাদ

@ গিলসের পরামর্শ অনুসারে, teeকোনও ফাইলের মেটাডেটা সংরক্ষণ না করার ত্রুটি রয়েছে using এই সমস্যাটি কাটিয়ে উঠতে আপনাকে তার পরে কমান্ডের নীচে চালাতে হবে:

cp --attributes-only --preserve Source Target

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

@ গিলস ওহ, আমরা কি এটি কাটিয়ে উঠতে পারি?
রাহুল

3
আপনি cp --attributes-onlyপরে চালাতে পারেন ।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

@ গিলস ধন্যবাদ, আপনার সাহায্য অনুসারে আমার উত্তর আপডেট করেছে।
রাহুল

FWIW অন্য কোনও উত্তর cp -pমেটাডেটা সংরক্ষণের জন্য ব্যবহৃত হয় না।
রোয়াইমা


1

Folowing কমান্ড কপি হবে file.a 5 বার:

$ seq 5 | xargs -I AA cp file.a fileAA.a

আপনি যদি ডিডি পছন্দ করেন (সিপির মতো নয়!):

$ seq 5 | xargs -I AA dd if=file.a of=fileAA.a

0

অনুলিপি করার সময় আপনি ভেরিয়েবল আই ডাকেন নি

স্ক্রিপ্টের নীচে ব্যবহার করুন। পরীক্ষিত হিসাবে এটি ভাল কাজ করে

for i in {1..10}; do cp -rvfp test.ogg test$i.ogg ;done

3
এটি আগের দুটি উত্তর এবং একই মতামত ব্যতীত (1) প্রশ্নটি 100 টি সম্পর্কে জিজ্ঞাসা করে, এবং আপনার উত্তর 10 ব্যবহার করে, (2) আপনি অপ্রয়োজনে -rvfবিকল্পগুলি যুক্ত করেছেন cpএবং (3) আপনি আপনার পরিবর্তনশীল প্রসারণ উদ্ধৃত করতে ব্যর্থ হয়েছেন । (এছাড়াও লক্ষ করুন যে এটি বিরাম চিহ্নগুলির মতো ;এবং নিম্নলিখিত শব্দের মধ্যে একটি স্থান থাকা প্রচলিত ।) -pবিকল্পটি সংযোজন মূল্যবান, তবে (4 এ) এটি ইতিমধ্যে (মন্তব্যে) সম্বোধন করা হয়েছে, এবং (4 বি) আপনার উত্তরটি নয় আপনি কী করছেন তা যদি আপনি ব্যাখ্যা না করেন তবে সহায়ক।
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.