Ls -Al- এ কেবলমাত্র ফাইলের নাম (স্পেস সহ) আউটপুট কিভাবে করবেন?


78

এই নির্মাণের সাথে আমার কেবল ফাইল বা ডিরেক্টরিগুলির নাম প্রতিধ্বনি করা উচিত:

ls -Al | while read string
do
...
done

ls -Al আউটপুট:

drwxr-xr-x  12 s162103  studs         12 march 28 12:49 personal domain
drwxr-xr-x   2 s162103  studs          3 march 28 22:32 public_html
drwxr-xr-x   7 s162103  studs          8 march 28 13:59 WebApplication1

উদাহরণস্বরূপ যদি আমি চেষ্টা করি:

ls -Al | while read string
do
echo "$string" | awk '{print $9}
done

তারপরে ফাঁকা জায়গা ছাড়াই কেবল ফাইল এবং ডিরেক্টরিগুলি আউটপুট দেয়। যদি ফাইল বা ডিরেক্টরিতে "ব্যক্তিগত ডোমেন" এর মতো স্পেস থাকে তবে এটি কেবল "ব্যক্তিগত" শব্দ হবে।

আমার খুব সহজ সমাধান দরকার। অ্যাজকের চেয়ে আরও ভাল সমাধান হতে পারে।


2
শুধু কেন নয় ls -Al *' '*? পার্সিংয়ের lsআউটপুট কখনই কোনও ভাল কিছুর দিকে নিয়ে যায় না।
manatwork

1
আপনার যদি এমন কোনও কিছু প্রয়োজন হয় যা কোনও * নিক্সে কাজ করে তবে ব্যবহার এড়ানো চেষ্টা করুন ls -Al | while। একটি সহজ এবং আরও নির্ভরযোগ্য উপায় হ'ল for string in *; do echo "$string"; done
ফোর্সফেস্ক

প্রয়োজন কেবল এই নির্মাণের সাথে..আচ্ছা, সহজ নয়, কোনও সমাধান!
অ্যালেক্স জার্ন

1
তোমার দরকার কেন ls? পার্সিং lsএবং "সমস্ত * নিক্সে কাজ করুন এবং কিছু ঘটলে ভাঙবে না" ভালভাবে একসাথে না যান।
টেরডন

উত্তর:


97

আপনি সত্যিই আউটপুট পার্স করা উচিত নয়ls । যদি এটি হোমওয়ার্কের অ্যাসাইনমেন্ট হয় এবং আপনার প্রয়োজন হয় তবে আপনার অধ্যাপক জানেন না যে তারা কী সম্পর্কে কথা বলছেন। আপনি কেন এমন কিছু করেন না:

ভাল...

find ./  -printf "%f\n"

অথবা

for n in *; do printf '%s\n' "$n"; done

...খারাপ জন...

আপনি যদি সত্যিই ব্যবহার করতে চান তবে আপনি এ জাতীয় lsকিছু করে কিছুটা দৃ bit় করতে পারেন:

ls -lA | awk -F':[0-9]* ' '/:/{print $2}'

... এবং কুৎসিত

যদি আপনি এটি ভুল, বিপজ্জনক উপায়ে করতে জোর দিয়ে থাকেন এবং কেবল একটি whileলুপ ব্যবহার করতে হয় তবে এটি করুন:

ls -Al | while IFS= read -r string; do echo "$string" | 
    awk -F':[0-9]* ' '/:/{print $2}'; done

গুরুতরভাবে যদিও, শুধু না।


drwx------ 2 s162103 studs 3 oct. 9 2012 .ssh drwxr-xr-x 3 s162103 studs 6 oct. 25 09:02 .subversion drwxrwxrwt 3 s162103 studs 3 nov. 15 2012 .TempoItemsকখনও কখনও আমি সময় ছাড়া তারিখ পেয়েছি, শুধুমাত্র বছর এবং
gawk

1
@ অ্যালেক্সার্ন ওয়েল, এটির অন্যতম কারণ আপনি আউটপুটটি বিশ্লেষণ করবেন না ls
টেরডন

2
@ অ্যালেক্সার্ন আপনি -lযেভাবেই স্যুইচ দরকার ? আপনার সমস্ত কিছু যদি ফাইলের নাম চান তবে কেবল চালান ls -A-lআপনাকে এখন আউটপুটটি বিশ্লেষণ করতে হবে তাই কেবল ব্যবহার করা আপনার জীবনকে আরও শক্ত করে তোলে।
টেরডন

কারণ আমার অতিরিক্ত তথ্য যেমন অ্যাক্সেস, তারিখ, মালিক ইত্যাদি প্রয়োজন need এবং আমি একটি বিশাল স্ক্রিপ্ট লিখেছিলাম, যা প্রিন্ট ফাইল এবং স্পেস সহ ডির নাম বাদে ভাল কাজ করে।
অ্যালেক্স জার্ন

3
ঠিক আছে তাহলে। আমাদের এখানে যা আছে তা এক্সওয়াই সমস্যাlsআপনার যা প্রয়োজন তা পাওয়ার সেরা উপায় নয়। আপনি যে তথ্য সংগ্রহ করতে চান তা ব্যাখ্যা করে আপনি কেন একটি নতুন প্রশ্ন পোস্ট করবেন না এবং আমরা এটি করার উপায়গুলি বলতে পারি। বিকল্পভাবে, আপনি আপনার স্ক্রিপ্টটি যেমনটি ব্যবহার করতে পারেন এবং কেবল নাম মুদ্রণের জন্য উপরের পরামর্শগুলির একটি ব্যবহার করতে পারেন। তবে গুরুত্ব সহকারে, বিশ্লেষণ করবেন না ls, একটি নতুন প্রশ্নে আপনি ঠিক কী করার চেষ্টা করছেন তা আমাদের জানান।
টেরডন

74

এমন কিছু কারণ আছে যে ls -A1* কাজ করবে না?

উদাহরণ:

$ touch file1 file2 file\ with\ spaces
$ ls -Al
total 0
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file1
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file2
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file with spaces
$ ls -A1
file1
file2
file with spaces
$

* দ্রষ্টব্য: এটি মূলধন A এবং প্রথম নম্বর।


4
-1 প্রতিভা। আমি জানতাম না যে এটি উপলব্ধ ছিল। (আমি জানি আমি জানি। আরটিএফএম)
অলস কোডার

এটি কেবলমাত্র বর্তমান ডিরেক্টরিতে কাজ করে যদি আপনি অন্য ডিরেক্টরি থেকে names / প্রকল্পের ফাইলের নাম তালিকাভুক্ত করতে চান তবে ফাইলের নামের পরিবর্তে আপনি পুরো পাথ পাবেন
thecotne

ম্যাক ১০.৯.৫ এ @thecotne এটি কেবল ফাইলের নাম তালিকাভুক্ত করে। আপনি কোন ওএস ব্যবহার করছেন?
এজেপি

আমি এই ls ~ / প্রজেক্টস / *। sublime- প্রকল্প -A1 কে ls ~ / প্রকল্পের জন্য চালাচ্ছি -A1 আমি কেবল নাম
পাই

3
@TheLazyCoder ম্যানুয়ালটি পড়বেন বলে আশা করা হবে না।
c24w

41

আমি অবাক হই যে কেন কেউ এই সাধারণ আদেশটি উল্লেখ করেনি:

ls -a | sort

2
উজ্জ্বল! sortপাইপিংয়ের ফলে মাল্টি-কলাম ব্লককে কীভাবে একক কলামে আনপাইভেট করা যায় তার কোনও ধারণা ?
msciwoj

@ এসএসসিওজেজ এটি কেবল সাদা জায়গাগুলি দ্বারা পৃথক করা যে কোনও স্ট্রিং নেয় এবং প্রিন্টগুলি এন্ডলাইনগুলি দ্বারা আলাদা করে সাজিয়ে তোলে
বেন

পারফেক্ট! কেন এই উত্তরটিকে আসল উত্তর হিসাবে চিহ্নিত করা হয়নি !?
期 劇場

3
এখানে কাজ করে কারণ lsফেরত করার ls -1(এবং মুদ্রণযোগ্য নয় এমন চরিত্র উদ্ধৃত / প্রতিস্থাপন নিষ্ক্রিয়; @Kusalananda, আপনার (একক columnd আউটপুট) তার আউটপুট একটি টার্মিনালে যেতে না যখন lsঅনুবর্তী POSIX না হয় এটি এখনও না)। lsআউটপুট ইতিমধ্যে বাছাই করা হয়েছে। সুতরাং এটি পাইপিং sortসর্বোত্তম কিছুই করবে না, এবং আরও খারাপভাবে আউটপুট আউট (যদি ফাইলের নামগুলিতে নিউলাইন অক্ষর থাকে) বা পাঠ্য নয় এমন ফাইল নামগুলির জন্য ব্যর্থ। ls -a | catভালো হবে. অথবা আরও ভাল ls -A1হিসাবে ইতিমধ্যে উল্লিখিত হয়েছে (এবং কারণ আপনি সাধারণত টার্মিনালে প্রদর্শিত হলে প্রতিস্থাপনগুলি / উদ্ধৃতিগুলি চান)
স্টাফেন চ্যাজেলাস

1
@ স্টাফেনচেজেলাস lsআউটপুট টার্মিনাল না হলে আলাদা আচরণ করে।
কুসালানন্দ

3

আপনি আউটপুটটি পার্স করতে পারবেন না ls, একা ছেড়ে দিন ls -lকারণ নিউলাইন, ঠিক যেমন স্থানের ফাইল ফাইলের অক্ষরের মত বৈধ। এছাড়াও, আপনাকে এমন সিমলিঙ্কগুলি বিবেচনা করতে হবে যাগুলির মতো আউটপুট রয়েছে ... foo -> bar

-lআপনি কেবল ফাইলের নাম চাইলে কেন আপনি যেভাবেই ব্যবহার করবেন ?

শুধু কর:

for file in *; do
  ...
done

আপনি যদি শেলের উপর নির্ভর করে ডট ফাইলগুলি ( .এবং ব্যতীত ..) অন্তর্ভুক্ত করতে চান :

zsh:

for file in *(ND); do
  ...
done

bash:

shopt -s nullglob dotglob
for file in *; do
  ...
done

ksh93:

FIGNORE='@(.|..)'
for file in ~(N)*; do
  ...
done

POSIXly:

for file in .[!.]* ..?* *; do
  [ -e "$file" ] || [ -L "$file" ] || continue
  ...
done


1
ls -Al | tr -s ' ' | cut -f9- -d' '

ট্রের সাহায্যে একাধিক স্পেস একক স্পেসে সংকুচিত করুন তারপর আপনি ক্ষেত্রগুলিতে বিভক্ত করতে কাটা ব্যবহার করতে পারেন


1

(চেষ্টা করুন bash, zsh, ksh93সিনট্যাক্স):

find . -type f -print0 | while IFS= read -r -d '' filename; do
  ...
done

এটি পুনরাবৃত্ত হয় এবং কেবলমাত্র সাধারণ ফাইলগুলিতে তালিকায় (যেমন কোনও ডায়ার বা সিমলিংক / ফিফোস / ডিভাইস ...)।

আরো দেখুন:



-1
ls --file *|grep ^ 

এটি কোন ডিরেক্টরিতে কোন ফাইলগুলি প্রদর্শন করে।


আমি মনে করি না যে এটি প্রশ্নের সমাধান করে।
জেফ শ্যাচলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.