Ls -l আউটপুট প্রতিটি লাইন উপর Iterating


119

আমি আউটপুট প্রতিটি লাইন উপর পুনরাবৃত্তি করতে চান: ls -l /some/dir/*

এখনই আমি চেষ্টা করছি: for x in $(ls -l $1); do echo $x; done

যাইহোক, এই লাইনের প্রতিটি উপাদান পৃথকভাবে পুনরাবৃত্তি করে, তাই আমি পেয়েছি:

-r--r-----
1
ivanevf
eng
1074
Apr
22
13:07
File1

-r--r-----
1
ivanevf
eng
1074
Apr
22
13:17
File2

তবে আমি সামগ্রিকভাবে প্রতিটি লাইন ধরে পুনরাবৃত্তি করতে চাই। আমি কেমন করে ঐটি করি?


1
আপনার কাছে নির্দিষ্ট কারণ না থাকলে সর্বদা ভেরিয়েবল (এবং কমান্ড আউটপুট) উদ্ধৃতি করুন।
গ্লেন জ্যাকম্যান 21

উত্তর:


246

আইএফএসকে নতুন লাইনে সেট করুন, এটির মতো:

IFS='
'
for x in `ls -l $1`; do echo $x; done

আপনি যদি স্থায়ীভাবে আইএফএস সেট করতে না চান তবে তার চারপাশে একটি সাব-শেল রাখুন:

(IFS='
'
for x in `ls -l $1`; do echo $x; done)

অথবা ব্যবহার করুন | পরিবর্তে পড়ুন:

ls -l $1 | while read x; do echo $x; done

আরও একটি বিকল্প, যা একই শেল স্তরের সময় / পঠন চালায়:

while read x; do echo $x; done << EOF
$(ls -l $1)
EOF

12
যখন পাইপ করার সময় সাবধান থাকবেন, সেই
সময়টি একটি সাবশেলের

1
এখানে $ 1 কী করছে? আমার এটি এমন একটি স্ক্রিপ্টে ব্যবহার করা দরকার যা আমি লিখছি যা আর্গুমেন্ট গ্রহণ করে। $ 1 জিনিস ফেলে দিচ্ছে। একই প্রভাব পেতে আমি $ 1 এর পরিবর্তে সেখানে কী রাখতে পারি? আমি দ্বিতীয় সমাধানটি ব্যবহার করতে চাই।
নুব-ইন-দরকার

@ নুব-ইন-প্রয়োজন আপনি যে ডিরেক্টরি ডিরেক্টরিতে চান তা এটির সাথে প্রতিস্থাপন করুন
vpzomtrrfrt

1
আপনি করতে চাইতে পারেন read -rঅন্যথায় বাশ ডেটা থেকে অনস্কেপড ব্যাকস্ল্যাশগুলি কেটে ফেলবে।
ব্রায়ান গর্ডন

6

এটি প্রতিটি লাইনের সাথে আপনি কী করতে চান তা নির্ভর করে। এই জাতীয় প্রক্রিয়াজাতকরণের জন্য awk একটি দরকারী ইউটিলিটি। উদাহরণ:

 ls -l | awk '{print $9, $5}'

.. আমার সিস্টেমে ডিরেক্টরিতে প্রতিটি আইটেমের নাম এবং আকার মুদ্রণ করে।


3

ইতিমধ্যে উল্লিখিত হিসাবে, awk এটির জন্য সঠিক সরঞ্জাম। আপনি যদি লঙ্কিতভাবে "ls -l" লাইনের আউটপুট পার্সিংয়ের পরিবর্তে অজগর ব্যবহার করতে না চান, আপনি সমস্ত ফাইলগুলিতে পুনরাবৃত্তি করতে পারেন এবং প্রতিটি পৃথক ফাইলের জন্য "ls -l" করতে পারেন:

for x in * ; do echo `ls -ld $x` ; done

3

আপনি findকমান্ডটি ব্যবহার করে দেখতে পারেন । আপনি যদি কেবল বর্তমান ডিরেক্টরিতে ফাইল চান:

find . -d 1 -prune -ls

তাদের প্রত্যেকের উপর একটি কমান্ড চালাবেন?

find . -d 1 -prune -exec echo {} \;

লাইন গণনা, তবে কেবল ফাইলগুলিতে?

find . -d 1 -prune -type f -exec wc -l {} \;


ভাঙ্গা আছে খুঁজে। Ioften কিছু উদ্ভট ত্রুটি বার্তা পান। কমান্ডলাইনটি পুরোপুরি বৈধ হয়ে উঠলে এটি আমাকে সহায়তা দিতে চায় এবং মনে হয় এটি একবার এটি করা শুরু করলে এটি পরবর্তী পুনরায় বুট না হওয়া পর্যন্ত থামবে না Y এটি কখনও কখনও ত্রুটি সম্পর্কিত প্রকৃতির এলোমেলো মনে হয়। আমি কীভাবে বাগটি রিপোর্ট করতে পারি তা নিশ্চিত নয়।
জিম মাইকেলস

1

Ls (1) কমান্ডের আউটপুট পুনঃনির্দেশের সাথে পঠিত (1) ইউটিলিটি আপনার যা ইচ্ছা তা করবে।


-1

সুতরাং, কেন কেউ কেবল এমন বিকল্পগুলি ব্যবহার করার পরামর্শ দেয়নি যা সেগুলি প্রক্রিয়া করতে চায় না এমন অংশগুলি মুছে দেয়।

আধুনিক ডেবিয়ানে আপনি কেবল এইটির সাথে আপনার ফাইলটি পাবেন:

ls --format=single-column 

আরও যদি আপনি পুরো ডিরেক্টরি ব্যবহার করেন তবে আপনাকে যে ডিরেক্টরিটি এটি চালাচ্ছেন তাতে আপনার মনোযোগ দিতে হবে না:

ls --format=single-column /root/dir/starting/point/to/target/dir/

এই শেষ কমান্ডটি আমি উপরেরটি ব্যবহার করছি এবং আমি নিম্নলিখিত আউটপুটটি পেয়েছি:

bot@dev:~/downloaded/Daily# ls --format=single-column /home/bot/downloaded/Daily/*.gz
/home/bot/downloaded/Daily/Liq_DailyManifest_V3_US_20141119_IENT1.txt.gz
/home/bot/downloaded/Daily/Liq_DailyManifest_V3_US_20141120_IENT1.txt.gz
/home/bot/downloaded/Daily/Liq_DailyManifest_V3_US_20141121_IENT1.txt.gz
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.