2012-09-23 10 views
33

के साथ अपने फाइलनामों के साथ सभी फ़ाइलों की सामग्री प्रदर्शित करें मुझे cat के साथ अपनी सामग्री से पहले प्रत्येक फ़ाइल नाम मुद्रित करने का कोई तरीका नहीं मिल रहा है। यहाँ है कि मैं क्या करने के लिए कोशिश कर रहा हूँ:बिल्ली

[email protected]:~/Perl/t$ ls 
1.txt 2.txt 3.txt 
[email protected]:~/Perl/t$ echo " I am " >> 1.txt 
[email protected]:~/Perl/t$ echo " trying " >> 2.txt 
[email protected]:~/Perl/t$ echo " to do this " >> 3.txt 
[email protected]:~/Perl/t$ cat *.* 
I am 
trying 
to do this 
[email protected]:~/Perl/t$ 

पिछले आदेश में मैं उन फ़ाइलों से केवल पाठ मिल गया है, लेकिन मैं वास्तव में फ़ाइल नाम के साथ पाठ चाहते हैं। मैं इस

Filename:1.txt 
<Data in the file> 

Filename:2.txt 
<Data in that file> 

Filename:3.txt 
<Data in that file > 

उत्तर

54

cat की तरह मतलब फ़ाइल नाम मुद्रित नहीं होंगे। या तो get the shell to do it या head या tail का उपयोग करें: जब आप एकाधिक फ़ाइलों को पार करते हैं तो फ़ाइल का नाम प्रिंट करें (बिल्कुल उसी प्रारूप में नहीं)। पूरी फ़ाइल मुद्रित करने के लिए tail -n +1 का उपयोग करें (लाइन 1 से शुरू होने पर, लाइन 1 से गिने जाते हैं)।

tail -n +1 -- *.txt 
+1

यह बहुत आसान लग रहा है। क्या मुझे पता चलेगा कि आपने क्यों उल्लेख किया - पूंछ कमांड में 1 के बाद। क्योंकि उनके बिना मुझे एक ही आउटपुट मिला। क्या कोई छुपा कारण है? http://pastebin.com/1WgHAUZq –

+3

कम से कम 'पूंछ (जीएनयू कोर्यूटिल्स) 8.13' के लिए, यह' tail -n +1 - * .txt' होना चाहिए क्योंकि 'tail -n 1' केवल अंतिम पंक्ति को आउटपुट करता है प्रत्येक फाइल। साथ ही, '-' –

+8

से शुरू होने वाले किसी भी फ़ाइल नाम के विकल्प के रूप में व्याख्या को रोकता है या 'grep^*' प्रत्येक आउटपुट लाइन के उपसर्ग के रूप में फ़ाइल नाम मुद्रित करेगा। '- * .txt' (जो सभी प्रोग्राम समर्थन नहीं करते हैं) के बजाय – tripleee

14
$ for f in *; do echo "Filename: $f"; cat "$f"; done 
Filename: 1.txt 
I am 
Filename: 2.txt 
trying 
Filename: 3.txt 
to do this 
+0

आह! भयानक दोस्त है। धन्यवाद। सरल कोड। –

+3

कोई गंदा हैक्स नहीं। कोई जंक आउटपुट नहीं। स्वयं वर्णन और सहज ज्ञान युक्त। +1 –

+2

मुझे इस समाधान के बारे में सबसे ज्यादा पसंद है कि यह यहां तक ​​कि सबसे अधिक लिपटे नीचे लिनक्स संस्करणों पर भी काम करता है (उदाहरण के लिए व्यस्त बॉक्स के साथ राउटर पर जो xargs, कम, अधिक, ढूंढ सकता है, ... पर निर्भर करता है विन्यास)। धन्यवाद! – NoUsername

34

यह हाल ही में ब्लॉग पोस्ट 4 unix commands I abuse every day के माध्यम से Hacker News पर चर्चा की गई।

यह का सार यह उपयोग करने के लिए किया गया था:

more * | cat 

इस पाने के लिए:

:::::::::::::: 
jack.txt 
:::::::::::::: 
Once upon a time 
there was a fellow named Jack. 
:::::::::::::: 
lyingryan.txt 
:::::::::::::: 
Now that "trickle down economics" has been 
tested for 30 years and the data shows it 
has been a total failure, candidates 
still claim that cutting taxes for 
billionaires will help the economy. 
:::::::::::::: 
market.txt 
::::::::::::::: 
Jack went to market to sell the family 
cow. 
He came back with a handful of magic beans. 

जो एक for ... do ... done पाश की तुलना में बहुत खूबसूरत है।

ब्लॉग पोस्ट head -n 99999 * जैसे की तुलना में विभिन्न यूनिक्सों में संगत होने के लिए इस दृष्टिकोण के लिए कई विकल्पों का उल्लेख करता है जो केवल लिनक्स पर काम करता है।

+0

'हेड-99 999 *' मैक ओएसएक्स पर मेरे लिए काम किया। – rcdmk

9

आप

ls -1 *.txt | xargs -I % sh -c "echo % ; cat %" 
बस

साथ उदाहरण के लिए इसे प्राप्त कर सकते हैं: हर .txt फ़ाइल

  • आदेश चला के लिए

    • echo filename ; cat filename
    • ( % एक स्थानापन्न के पैटर्न -I द्वारा परिभाषित किया गया है)
  • +1

    +1 अच्छा, साफ और सार्वभौमिक समाधान। – cajwine

    +0

    @Nemo क्या आप समझा सकते हैं- I% sh -c उस कमांड में – CodeCrack

    8

    तुम भी अति प्रयोग grep कर सकते हैं एक छोटा सा है कि प्राप्त:

    grep -r '.*' *.txt 
    

    लाइन नंबर आप

    grep -rn '.*' *.txt 
    

    ग्रेप से ऊपर कुछ भी करने के लिए लग रहा है कर सकते हैं पाने के लिए। आप

    grep -r . . 
    

    की सामग्री सूचीबद्ध करने के लिए कर सकते हैं ताकि

    grep -r . *txt 
    

    इसके अलावा -r ग्रेप स्विच रिकर्सिवली चलाने के लिए ग्रेप बनाता है,: मामले में आप खाली लाइनों में कोई दिलचस्पी नहीं कर रहे हैं आप और भी सरल बनाया है सकते हैं आपकी वर्तमान निर्देशिका में सभी फाइलें।

    [संपादित करें] डाउनसाइड: यह धीमा है, इसलिए बड़ी संख्या में फाइलों के लिए मैं इसका उपयोग नहीं करता।

    +1

    यह ऑडिट कोड द्वारा स्रोत कोड लाइन के लिए बहुत उपयोगी है, कुछ पैटर्न की उपस्थिति सुनिश्चित करने के लिए कोड की सभी पंक्तियों को स्कैन करना और कोड की एक पंक्ति ढूंढना क्या यह एक ही पंक्ति पर फ़ाइल नाम की रिपोर्ट नहीं करता है। –

    संबंधित मुद्दे