কমান্ড লাইন: ফাইলের নামটি ইতিমধ্যে উপস্থিত থাকলে নতুন ফাইল নাম দিয়ে ফাইল তৈরি করুন


8

আমি ভাবছিলাম যে এটির একটি কমান্ড রয়েছে যা একটি ফাইল তৈরি করে, তবে কমান্ডটি যতবার প্রয়োগ করা হবে ততক্ষণে এটি পূর্ববর্তী নির্বাহে নির্মিত ফাইলটি ওভাররাইট করে না।

উদাহরণস্বরূপ: কল করা touch test1.txtহবে 1 ফাইল তৈরি test1.txt। তবে পরের বার এটি সম্পাদন করার সময় আমি চাইলে নতুন ফাইলটি কল করা হোক test2.txtবা এর মতো কিছু। সুতরাং ইতিমধ্যে বিদ্যমান ফাইল ওভাররাইট না করে। কোনওভাবে সমস্যা ছাড়াই এটি একাধিকবার কার্যকর করা যেতে পারে।

আমাকে ভুল বুঝবেন না, আমি একটি কমান্ড দিয়ে একাধিক ফাইল তৈরি করার চেষ্টা করছি না।

আগাম ধন্যবাদ!

উত্তর:


9

সবচেয়ে সহজ সমাধান হ'ল ফাইল নেমে টাইমস্ট্যাম্প যুক্ত করা এবং একক সংখ্যা ব্যবহার না করা।

খালি ফাইল তৈরির সবচেয়ে সহজ পদ্ধতিটি হ'ল touch test$(date +%Y%m%d-%H%M%S)এবং এর ফলে কোনও ফাইলের নাম হবে test20110802-170410। ২ য় বার test*একটি নতুন টাইমস্ট্যাম্প পাবে তাই এর ফলে 2 টি ফাইল আসবে।


এটি আমি যা খুঁজছিলাম ঠিক সেটাই, ধন্যবাদ! :)
নিক লেমারে

কোনও স্ক্রিপ্টে কাজ করে না (এর মধ্যে অপেক্ষায় নেই) - আমি চেষ্টা করেছি touch test$(date +%Y%m%d-%H%M%S) ; touch test$(date +%Y%m%d-%H%M%S), এটি কেবল একটি ফাইল তৈরি করেছে। ন্যানোসেকেন্ডস-সময় কাজ করে: touch test$(date +%Y%m%d-%H%M%S%N) ; touch test$(date +%Y%m%d-%H%M%S%N)এবং touch test$(date +%Y%m%d-%H%M%S%N) test$(date +%Y%m%d-%H%M%S%N)প্রতিটি দুটি করে ফাইল তৈরি করুন।
ভোলকার সিগেল

ভাল ব্যবহার করা ভাল $()যেহেতু আপনি নীড় এক্সপ্রেশন করার অনুমতি দেয়, কিন্তু আপনি ব্যাকটিক ব্যবহার করতে পারেন: touch test`date +%Y%m%d-%H%M%S`
পাবলো বিয়ানচি

5

আমি সন্দেহ করি যে এটি করার জন্য একটি সাধারণ কমান্ড রয়েছে, তবে আপনি এটির মতো কিছু ভাবতে পারেন:

create() {
  read prefix number suffix < <(sed -r 's/(.*)([0-9]+)\.(.*)$/\1 \2 \3/' <<<"$1")
  while true; do
    file="$prefix$number.$suffix"
    if [[ -e "$file" ]]; then
      ((number++))
    else
      touch "$file"
      break
    fi
  done
}

ফাংশনে ইনপুট প্যারামিটারটি উপসর্গ, সংখ্যা, প্রত্যয়তে বিভক্ত হয়, তারপরে ফাইল উপস্থিত না হওয়া পর্যন্ত সংখ্যাটি বৃদ্ধি করা হয়। একটি নিখরচায় স্লট পাওয়া গেছে, ফাইলটি দিয়ে তৈরি করা হয়েছে touch

বিভাজন প্রক্রিয়াটি আপনার প্রয়োজনের সাথে খাপ খাইয়ে নেওয়া উচিত এবং বিভিন্ন ত্রুটি চেক যুক্ত করা উচিত।


উজ্জ্বল, দুর্দান্ত ফাংশন।
মার্কো সেপ্পি

1

যদি সিকোয়েন্স নম্বরগুলির প্রয়োজন হয় না, তবে mktempকমান্ডটি ব্যবহার করা সবচেয়ে সহজ উপায় ।


mktemp একটি টেমপ্লেট ব্যবহার করে একটি এলোমেলো, অনন্য ফাইলের নাম উত্পাদন করে। আপনি সম্ভবত একটি ভেরিয়েবলে এমকেটেম্পের আউটপুট ক্যাপচার করবেন। লিনাক্সমানপেজগুলি থেকে :TMPFILE=$(mktemp /tmp/example.XXXXXXXXXX) || exit 1 echo "program output" >> $TMPFILE
বিগভৌগান

আর একটি সাধারণ পদ্ধতি হ'ল শেল ভেরিয়েবল the থেকে বর্তমান প্রক্রিয়া আইডি ব্যবহার করা:TMPFILE='/tmp/tmp.$$'; touch $TMPFILE
বিজিওয়গান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.