আমি cwd এর মধ্যে সমস্ত ফোল্ডারের টাইমস্ট্যাম্পগুলি আপডেট করার চেষ্টা করছি:
for file in `ls`; do touch $file; done
তবে কাজ হচ্ছে বলে মনে হচ্ছে না। কোন ধারণা কেন?
আমি cwd এর মধ্যে সমস্ত ফোল্ডারের টাইমস্ট্যাম্পগুলি আপডেট করার চেষ্টা করছি:
for file in `ls`; do touch $file; done
তবে কাজ হচ্ছে বলে মনে হচ্ছে না। কোন ধারণা কেন?
উত্তর:
এখনও অবধি সমস্ত উত্তর (পাশাপাশি আপনার প্রশ্নের উদাহরণ হিসাবে) ধরে নেওয়া হয়েছে যে আপনি touch
ডিরেক্টরিতে সমস্ত কিছু চান , যদিও আপনি "সমস্ত ফোল্ডারগুলিকে স্পর্শ করুন" বলেছিলেন। ডিরেক্টরিটি যদি ফাইল ও ফোল্ডারগুলি ধারণ করে এবং আপনি কেবল ফোল্ডারগুলি আপডেট করতে চান তবে আপনি এটি ব্যবহার করতে পারেন find
:
$ find . -maxdepth 1 -mindepth 1 -type d -exec touch {} +
অথবা যদি আপনার find
বাস্তবায়ন অ-মানক -mindepth
/ -maxdepth
পূর্বাভাসগুলি সমর্থন করে না :
$ find . ! -name . -prune -type d -exec touch {} +
এই:
$ touch -c -- */
এটি বাদে বেশিরভাগ শেলগুলিতে কাজ করা উচিত:
touch
ডিরেক্টরিগুলিতে প্রতিলিঙ্ক করবে*
আর অন্য শেল মধ্যে csh
, tcsh
, zsh
, fish
বা থম্পসন শেল (যা একটি ত্রুটি পরিবর্তে প্রতিবেদন হবে)। এখানে, আমরা -c
এটির চারপাশে কাজ করার জন্য ব্যবহার করছি , যদিও এটি এখনও touch
একটি ডিরেক্টরি ছাড়াই ডাইরেক্টরি ফাইল হতে পারে *
।সঙ্গে zsh
, এর touch
ডিরেক্টরি শুধুমাত্র লুকানো বেশী অন্তর্ভুক্ত রয়েছে:
touch -- *(D/)
{} \+
বিশেষ find
সিনট্যাক্স - আরো জন্য man পৃষ্ঠা পড়ুন। আমি মনে করি touch -c ./*/
পাশাপাশি কাজ করবে।
-maxdepth 1
আপনার কমান্ডটি অন্তর্ভুক্ত করা উচিত , যাতে এটি find
সাবফোল্ডারগুলিতে পুনরাবৃত্তি না করে। ওপি মনে করে যে কেবল ফোল্ডারগুলিকে কেবল সিডব্লিউডে স্পর্শ করতে চায়, সাবফোল্ডারগুলি নয়।
চেষ্টা
touch ./*
এটি অপ্রয়োজনীয় for
লুপটি এড়িয়ে চলে যা প্রতিটি ফাইলের জন্য একটি নতুন প্রক্রিয়া তৈরি করে এবং সমস্ত ফাইলের নামের জন্য কাজ করে, এমনকি ফাঁকা স্থানগুলি বা বিকল্পগুলির মতো দেখতে (যেমন -t
) দেখায় । কেবলমাত্র এটি কাজ করবে না যদি আপনার যদি কোনও ডিরেক্টরিতে (নন-ডট) ফাইল না রেখে থাকেন তবে আপনি নামের ক্ষেত্রে একটি ফাইল তৈরি করবেন *
। এটি এড়ানোর জন্য, touch
বেশিরভাগ বাস্তবায়নের নির্দিষ্ট ক্ষেত্রে অস্তিত্বহীন ফাইল তৈরি না করার জন্য একটি -c
বিকল্প ( --no-create
জিএনইউ সংস্করণেও ডাকা হয়) রয়েছে ie
touch -c ./*
এছাড়াও ভাল রেফারেন্স দেখুন jasonwryan এর উত্তর সেইসাথে এই এক ।
আপনি আউটপুট পার্স করার প্রচেষ্টা করা উচিত নয়ls
।
এছাড়াও, "$file"
কোনও সাদা স্থান ক্যাপচার করার জন্য আপনার উদ্ধৃতি দেওয়া উচিত । Http://www.grymoire.com/Unix/Quote.html দেখুন
এর পরে এমন কিছু হতে পারে যা আপনি পরে যা করতে পারেন:
for file in *; do touch "$file"; done
আরও বিশদ ব্যাখ্যার জন্য প্রথম দুটি বাশ পিটফলস দেখুন।
*
ফাইল এবং ডিরেক্টরি ক্যাপচার করে না যার নাম একটি বিন্দু দিয়ে শুরু হয়। এটির সমাধানের একটি উপায় হ'ল dotglob
শেল বিকল্পটি এর মাধ্যমে সক্ষম করা shopt -s dotglob
।