এল এস এগুলি সমস্ত এক লাইনে মুদ্রণ করুন (টার্মিনালের মতো)


15

ls আউটপুটটি টার্মিনালে বা অন্য কোনও কিছুর উপর নির্ভর করে আলাদাভাবে মুদ্রণ করে।

উদাহরণ:

$ ls .
file1  file2
$ ls . | head
file1
file2

lsএক লাইনে প্রিন্ট আউট করার কোনও উপায় আছে যেন এটি যখন টার্মিনালে না হয়। একটি -Cযুক্তি রয়েছে যে সাজ্টা এটি করে তবে এটি এটি বিভিন্ন লাইনে বিভক্ত হবে।

$ ls
file1  file10  file11  file12  file13  file14  file15  file16  file17  file18  file19 file2  file3  file4  file5  file6  file7  file8  file9
$ ls -C . | head
file1 file11 file13 file15 file17 file19 file3  file5  file7  file9
file10 file12 file14 file16 file18 file2 file4  file6  file8

যে কারণটি আমি এটি করতে চাই তা হ'ল আমি একটি ডিরেক্টরিতে থাকা ফাইলগুলি দ্রুত পর্যবেক্ষণ করতে চাই। আমি এই সাধারণ কমান্ড লাইনটি তৈরি করেছিলাম:

while [[ true ]] ; do ls ; done | uniq

ইউনিক এটি আমার টার্মিনালটিকে স্প্যাম করা এবং শুধুমাত্র পরিবর্তনগুলি দেখানো থেকে বাধা দেয়। তবে এটি এগুলি সমস্ত ডিফারনেট লাইনে মুদ্রণ করছিল যা ইউনিটকে অকেজো করে দিচ্ছিল এবং শব্দের পরিমাণ বাড়িয়ে তুলছিল। তত্ত্বগতভাবে কেউ এর watchজন্য ব্যবহার করতে পারে তবে আমি ফাইলটি প্রদর্শিত / অদৃশ্য হওয়ার সাথে সাথে দেখতে চাইতাম।

এটিই চূড়ান্ত সমাধান:

while [[ true ]] ; do ls | tr '\n' ' ' ; done | uniq

4
যদি আপনি অন্য কমান্ডে এলএস পাইপ করছেন তবে আপনি কিছু ভুল করছেন। আপনি আসলে কী অর্জন করার চেষ্টা করছেন?
জাস্টিন

জাস্টিন, আমি একটি ব্যাখ্যা দিয়ে প্রশ্ন আপডেট করেছি।
রোরি

উত্তর:


15

আমি এমন কোনও সুইচ সম্পর্কে জানিনা যা এটি করতে পারে তবে আপনি trএটির মাধ্যমে আপনার আউটপুটটি পাইপ করতে পারেন :

ls | tr "\n" " " | <whatever you like>

18
ls | xargs

এটি আমার পক্ষে কাজ করে, আমি খুঁজে পাওয়া সবচেয়ে সহজতম উপায়। আশা করি এটি আপনাকেও সহায়তা করবে।



4

আহ, এখন আপনি প্রশ্ন আপডেট করেছেন ...

while true ; do echo * ; done | uniq

আপনি যা পোস্ট করেছেন তা করবে, কেবল সহজ।

যাইহোক, আপনি এমন কিছু ব্যবহারের চেয়ে ভাল যা এটি করার জন্য inotify ব্যবহার করে .. লাইক like

inotifywait -m . -e create,delete

যদি আপনার ইনোটাইফাই না থাকে তবে এর মতো কিছু খুব ভালভাবে কাজ করে:

import os
import time

last = set()
while True:
    cur = set(os.listdir('.'))
    added = cur-last
    removed = last-cur
    if added: print 'added', added
    if removed: print 'removed', removed
    last = set(os.listdir('.'))
    time.sleep(0.1)


0

এটি আপনি যা খুঁজছেন তা হতে পারে তবে আমি আপনার প্রশ্নটি ভুল বুঝে থাকতে পারি তবে এখানে যায় :)

কয়েকটি কমান্ড যা দেখার দরকার তা হল:

দেখুন - পর্যায়ক্রমে একটি প্রোগ্রাম সম্পাদন করুন, আউটপুট ফুলস্ক্রিন xargs দেখিয়ে - স্ট্যান্ডার্ড ইনপুট থেকে কমান্ড লাইনগুলি তৈরি করুন এবং সম্পাদন করুন (-0 আপনি যদি ফাঁকা স্থানের সাহায্যে ফাইলগুলি পরিচালনা করতে চান)

2 সেকেন্ডের ব্যবধানের সাথে পরিবর্তিত সর্বশেষ 10 ফাইল / ডায়ারগুলি দেখানোর জন্য আপনি নীচের মতো কিছু করতে পারেন (ঘড়ির জন্য ডিফল্ট)

"ls -lart | লেজ -10" দেখুন

বিকল্পগুলি -সাল্ট ls কে ভার্জোজ এবং পরিবর্তনের সময়ের উপর ভিত্তি করে সাজানোর জন্য বলে।

আপনি যদি সত্যিই কেবল ফাইলগুলি চান তবে আমি এই জাতীয় কিছু করব:

"ls -lart | awk '{মুদ্রণ \ $ 8}' | লেজ -10 | xargs" দেখুন

বা কেবল তাদের প্রদর্শন করতে:

ls -lart | awk '{মুদ্রণ $ 8}' | লেজ -10 | xargs


0

এটি অর্জনের জন্য আপনি শেলের পিছনে টিকগুলি ব্যবহার করতে পারেন:

echo -E `ls -1`

সমস্ত ফাইলের নাম নিয়ে কাজ করে না। চেষ্টা করুন:touch ./-en
ক্যাস্পারড

এটি কেবল তখনই গুরুত্বপূর্ণ যদি আপনার [a-d]আগে এই ফাইলটি সাজ্টের সাথে শুরু না করে। আপনি যদি এটি কোনও স্ক্রিপ্টে চালাচ্ছেন তবে echo -Eখুব অসুবিধাগুলি হবে না এবং পেছনের নতুন লাইন কোনও বিষয় নয়।
ছানা

0

এটি আমার পক্ষে কাজ করেছে কারণ আমার কেবল একটি লাইনে ফলাফল মুদ্রণের প্রয়োজন ছিল না তবে এটি কীভাবে পৃথক করতে হয়েছিল তাও আপনাকে নির্দিষ্ট করতে হবে এবং আপনি ওআরএস দিয়ে এটি নির্দিষ্ট করতে পারেন

ls -1 | awk '{ ORS="|"; print; }'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.