Ls इसे एक लाइन पर प्रिंट करें (जैसे टर्मिनल में)


15

ls प्रिंट एक टर्मिनल या कुछ और करने के लिए अलग है कि क्या पर निर्भर करता है।

उदाहरण के लिए:

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

क्या lsएक लाइन पर प्रिंट आउट बनाने का कोई तरीका है जैसे कि यह टर्मिनल के लिए है जब यह नहीं है। एक -Cतर्क है कि sorta ऐसा करता है, लेकिन यह इसे कई लाइनों में विभाजित करेगा।

$ 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
यदि आप ls को दूसरे कमांड पर पाइप कर रहे हैं, तो आप कुछ गलत कर रहे हैं। क्या आप वास्तव में पूरा करने की कोशिश कर रहे हैं?
जस्टिन

जस्टिन, मैंने एक स्पष्टीकरण के साथ सवाल अपडेट किया है।
रोरी

जवाबों:


15

मुझे उस स्विच का पता नहीं है जो ऐसा कर सकता है, लेकिन आप trइसे करने के लिए अपने आउटपुट को पाइप कर सकते हैं :

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

18
ls | xargs

यह मेरे लिए काम करता है, यह अब तक का सबसे सरल तरीका है। आशा है कि यह आपकी मदद करता है।



4

आह, अब जब आपने प्रश्न को अपडेट कर दिया है ...।

while true ; do echo * ; done | uniq

आप क्या पोस्ट करेंगे, बस सरल।

हालाँकि, आप कुछ ऐसा करने के लिए बेहतर हैं जो इसे करने के लिए inotify का उपयोग करता है .. जैसे

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 यदि आप रिक्त स्थान आदि के साथ फ़ाइलों को संभालना चाहते हैं)

आप अंतिम 10 फ़ाइलों / डायर को दिखाने के लिए निम्न जैसा कुछ कर सकते हैं जो 2 सेकंड के अंतराल (घड़ी के लिए डिफ़ॉल्ट) के साथ बदल गया

"ls -lart | tail -10" देखें

विकल्प -लार्ट एलएस को क्रियात्मक समय के आधार पर क्रिया और क्रमबद्ध करने के लिए कहते हैं।

यदि आप वास्तव में सिर्फ फाइलें चाहते हैं तो मैं कुछ ऐसा करूंगा:

घड़ी "ls -lart | awk '{print \ $ 8}' | tail -10 | xargs"

या बस उन्हें प्रदर्शित करने के लिए:

ls -लार्ट | awk '{प्रिंट $ 8}' | पूंछ -10 | xargs


0

आप इसे प्राप्त करने के लिए शेल में वापस टिक का उपयोग कर सकते हैं:

echo -E `ls -1`

सभी फ़ाइल नामों के साथ काम नहीं करता है। कोशिश करें:touch ./-en
kasperd

यह तभी मायने रखता है जब आपके पास [a-d]इससे पहले उस तरह की कोई फाइल न हो। यदि आप इसे किसी स्क्रिप्ट में चला रहे हैं, तो यह echo -Eबहुत असुविधाजनक नहीं होगा और अनुगामी न्यूलाइन मायने नहीं रख सकती है।
चूजों

0

इसने मेरे लिए काम किया क्योंकि मुझे न केवल परिणाम को एक पंक्ति में मुद्रित करने की आवश्यकता थी, बल्कि यह भी निर्दिष्ट करने की आवश्यकता थी कि इसे कैसे अलग करना है और आप इसे ओआरएस के साथ निर्दिष्ट कर सकते हैं।

ls -1 | awk '{ ORS="|"; print; }'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.