कई फ़ाइलों की सामग्री दिखाएं


19

कमांड लाइन से, एकाधिक फ़ाइलों की सामग्री को दिखाने का सबसे आसान तरीका क्या है? मेरी निर्देशिका नीचे की तरह दिखती है।

./WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b
./xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM
./GZnATXO1e5Hh3Bz1bhgJjjwheIjjZqtnXR0hfOyj
./mWz7ehBNoTZmtDh8JG6sxw2lMJFwIovPzxDGECUY
./JN65F5v3RL2ilHPqNSx9N9D4lvVpqpbJ9lASd8TJ
./At9PS4y4nTiXUO0Z0USnbYkTPBla1msQRpwuruqE
./YiPyMZPCaUDZTiTczAvWII9bJrUqLXCFtH2pXEA2
./JoakdlbRFPwAvWp1d4n8RvMoyMeizCoiriL2Sn2U
./wFPWZUus8Yu7UtESGABLCoqDg36cT90USO0xuyUr
./qseI9PgV1EJfZCDyGGeVytajqG7JeX0r7eA5S1JW
./zgFJpNgXyCsaVh38aCuMGuzHwIbwSNB6rQDdh27x
./.htaccess

अब मैं सिवाय सभी फाइलों की सामग्री को देखना चाहूंगा .htaccess। यह कुछ इस तरह लग सकता है:

WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b:
Contents of file WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b.

xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM:
Contents of file xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM.

[...]

मुझे लगता है कि यह खोज, xargs और बिल्ली के संयोजन के साथ उचित होना चाहिए, लेकिन मुझे यह पता नहीं चला है कि कैसे। आपके समय के लिए धन्यवाद!


जवाबों:


30

यदि आप उन्हें एक से अधिक फ़ाइल तर्क से पास करते हैं, तो दो मानक कमांड headऔर tailफ़ाइल नाम के साथ एक हेडर प्रिंट करते हैं। पूरी फाइल को प्रिंट करने के लिए, tail -n +1(पहली पंक्ति से प्रिंट करें , यानी सब कुछ)।

यहाँ, ऐसा लगता है कि आप हर एक फ़ाइल को देखना चाहते हैं, सिवाय जिसका नाम डॉट के साथ शुरू होता है। डॉट फाइलें यूनिक्स के तहत "छिपी" हैं: वे डिफ़ॉल्ट आउटपुट में दिखाई नहीं देते हैंls या वाइल्डकार्ड मैच में । इसलिए हर गैर-छिपी हुई फ़ाइलों का मिलान बस के साथ किया जाता है *

tail -n +1 *

(कड़ाई से बोलना, tail -n +1 -- *मामले में आवश्यक है कि फ़ाइल नामों में से एक एक के साथ शुरू होता है -।)


छोटी और प्यारी, धन्यवाद! क्या आप जानते हैं कि मैं --संशोधक के बारे में कहाँ पढ़ सकता हूँ ?
ज़्नार्कस

2
@Znarkus: --विकल्पों के अंत को सूचित करने के लिए एक सम्मलेन है जो अधिकांश आज्ञाओं का पालन करता है। जैसे tail -n +1 -- -f -gबताता है tailकि -fऔर -gपढ़ने के लिए फ़ाइलें हैं (ऑपरेंड) और विकल्प नहीं। यह POSIX उपयोगिता वाक्यविन्यास दिशानिर्देश (उपयोगिता लेखकों के लिए इच्छित दस्तावेज़) में दिशानिर्देश 10 है । मेरे पास अंत-उपयोगकर्ताओं के लिए पढ़ने का कोई सुझाव नहीं है, मैं किसी अच्छे यूनिक्स ट्यूटोरियल से यह उम्मीद करूंगा कि इसे किसी बिंदु पर कवर किया जाए।
गिल्स एसओ- बुराई को रोकें '

बस एक टिप्पणी, क्योंकि कई अन्य उत्तर उपयोग करने का प्रस्ताव findहै, लेकिन फिर प्रिंट स्वरूपण के साथ कुछ कार्यकारी का उपयोग करें: उपयोग करने के लिए एक आसान तरीका findऔर tailहै: find . -type f -print0 -name "*" | xargs -0 tail -n +1 -- ( -print0और xargs -0और --यह सुनिश्चित करें कि आदेश भी रिक्त स्थान के साथ फ़ाइल नामों के साथ काम करता है या के साथ शुरू -)
IanH

14

आप यह सब एक साथ कर सकते हैं find:

$ find . -type f -not -name .htaccess -printf "\n%p\n" -exec cat {} \;

यह वर्तमान निर्देशिका ( ) को छोड़कर findसभी फाइलों ( -type f) को खोजने के लिए कहता है .( -not) एक नाम .htaccess( -name .htaccess)। फिर यह -printfफ़ाइल नाम ( %p) के बाद एक नई रेखा प्रिंट करता है ( ), और फिर catफ़ाइल ( -exec cat {} \;) पर चलता है । इससे आपको आउटपुट मिलेगा:

test/test3
Line 1

test/test2
Line 1

test/test1
Line 1
Line 2
Line 3

यदि आप ऐसा अक्सर करते हैं, तो यह शेल स्क्रिप्ट या फ़ंक्शन में चिपकाने के लायक हो सकता है; मेरे पास एक नाम है catsजो वास्तव में ऐसा करता है:

#!/bin/bash
for filename; do
    echo "\033[32;1m$filename\033[0m"
    cat "$filename"
    echo
done

यह प्रत्येक फ़ाइल नाम तर्क पर लूप करता है, फ़ाइल नाम (बोल्ड ग्रीन में) प्रिंट करता है, और फिर फ़ाइल को कैट करता है:

उदाहरण स्क्रीनशॉट

तो फिर कमान सिर्फ होगी:

$ find . -type f -not -name .htaccess -exec cats {} \+

दूसरा छोटा था, इसलिए स्वीकार कर लिया। उत्कृष्ट जवाब हालांकि, धन्यवाद!
ज़्नार्कस

6

वर्तमान फ़ोल्डर में सभी फ़ाइलों की सामग्री दिखाने के लिए, प्रयास करें:

grep -vI "\x00" -- *

और इसी तरह, लेकिन पुनरावर्ती:

grep -vIr "\x00" -- .

प्रारूप होगा: filename: content :।

जैसा सुझाव दिया गया है, वैसा ही प्रारूप होगा:

grep -rvl "\x00" -- * | while read file; do printf "\n\n#### $file ####\n"; cat $file; done

साइड नोट्स:

  • \x00उपरोक्त उदाहरणों में एनयूएल ( ) का उपयोग करना बाइनरी फ़ाइलों (जो कि) को प्रदर्शित करने से रोकता है-I वास्तव में कर रहा है, लेकिन हम अभी भी कुछ पैटर्न का उपयोग कर सकते हैं)।
  • वाइल्डकार्ड ( *) का उपयोग करते हुए , यह स्वचालित रूप से छिपी हुई फाइलों को अनदेखा करता है जैसे कि .htaccess

इसे भी देखें: grep: एक बार फ़ाइल नाम प्रदर्शित करें, फिर यूनिक्स एसई में लाइन संख्या के साथ संदर्भ प्रदर्शित करें


2
आमतौर grep -r ^पर पर्याप्त है।
कैटप्नोसिस


1

यदि आप धुन को ठीक करना चाहते हैं और पाइप के साथ बहुत अधिक समय नहीं खोना चाहते हैं, तो सब कुछ पाएं (सब कुछ सबसे शक्तिशाली टूलकिन है जो आप कभी भी कर सकते हैं)

बस एक लूप, बिल्ली, आदि का उपयोग करने का प्रयास करें।


0

यदि आप चाहते हैं कि इसे पुनरावर्ती उपयोग के लिए प्रिंट करें (उदाहरण के लिए .sql एक्सटेंशन वाली फ़ाइलों के लिए):

find -name "*.sql" -exec cat {} \; > all.sql
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.