পুনরাবৃত্তি ছাড়া ls কিভাবে


19

আমি একটি ডিরেক্টরিতে একটি প্যাটার্ন সহ কিছু ফাইলকে এলএস করার চেষ্টা করছি। আমি কেবল প্রথম স্তরের পুনরাবৃত্তি না করে স্ক্যান করতে চাই।

আমার লিপি:

for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
  echo $i;
done

উপরে কমান্ড পুনরাবৃত্তি স্ক্যান। কীভাবে এটি কেবল প্রথম স্তরের ডিরেক্টরি স্ক্যান করতে পারে?


printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
মাইক্রজারভ

উত্তর:


39

পার্স নাls । এছাড়াও ALL_CAPS_VARS ব্যবহার করবেন না

for i in "$incoming_dir"/*"$business_date"*; do

ইন্টারেক্টিভভাবে, lsএর একটি -dবিকল্প রয়েছে যা উপ-ডিরেক্টরিতে নামতে বাধা দেয়:

ls -d $INCOMINGDIR/*$BUSSINESSDATE*

তথ্যের জন্য ধন্যবাদ, আমি এখন সিসাদমিনদের বিরক্ত করার জন্য নামে নতুন লাইন দিয়ে ফাইল তৈরি শুরু করতে যাচ্ছি।
পেটাহ

এজন্য স্মার্ট সিসাদমিন / প্রোগ্রামার ব্যবহার করে "${i}"। আপনি কি জানেন না কি হতে পারে i
রিকি বিম

@ পেটা: বা খারাপ উদ্দেশ্য নিয়ে কেউ একটি ফাইল তৈরি করতে পারে my_file.doc[newline]another_persons_file.docএবং আশা করে যে কিছু স্ক্রিপ্ট এটি 2 ফাইলের নাম হিসাবে দেখায় "আরএম" করার চেষ্টা করতে পারে ... গ্লেনের লিঙ্কটি অবশ্যই পড়তে হবে (মাইউইকি.উইউইলজিইআরইজে, প্রত্যেককেই পড়া উচিত পুরো প্রায়শই জিজ্ঞাসাবাদ, এবং
সমস্যাগুলি পৃষ্ঠাও

1
শীতল। আমি -d বিকল্পটি জানতাম না!
ডকস্পার

গ্রেট! এটি সহজ জিনিসগুলির জন্যও কাজ করে। যেমন সমস্ত বিন্দু- ls -d .*
উপসর্গযুক্ত

8

এই আদেশটি পুনরাবৃত্তি হওয়ার কোনও কারণ নেই। তবে যদি $INCOMINGDIR/*$BUSSINESSDATE*কোনও ডিরেক্টরি মেলে তবে ডিরেক্টরিটির পরিবর্তে এই ডিরেক্টরিটির বিষয়বস্তু প্রদর্শিত হবে। তবে এই স্তরটির বাইরে কোনও পুনরাবৃত্তি হবে না।

এই প্রভাবটি এড়াতে এই আদেশটি ব্যবহার করুন:

ls -d "$INCOMINGDIR/"*"$BUSSINESSDATE"*

for ... inlsআউটপুট সহ কমান্ডগুলি ঝুঁকিপূর্ণ।

সাধারণত findএকটি ভাল সমাধান বলে মনে হয় বা

for i in "$INCOMINGDIR/"*"$BUSSINESSDATE"*
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.