Birçok dosyanın içeriğini göster


19

Komut satırından, birden çok dosyanın içeriğini göstermenin en kolay yolu nedir? Dizim aşağıdaki gibi görünüyor.

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

Şimdi hariç tüm dosyaların içeriğini görmek istiyorum .htaccess. Şuna benzeyebilir:

WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b:
Contents of file WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b.

xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM:
Contents of file xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM.

[...]

Bunun find, xargs ve cat kombinasyonu ile yapılabilmesi gerektiğini düşünüyorum, ama nasıl olduğunu anlayamadım. Zaman ayırdığınız için teşekkürler!


Yanıtlar:


30

İki standart komut headve tailbirden fazla dosya bağımsız değişkenini iletirseniz dosya adıyla bir başlık yazdırın. Dosyanın tamamını yazdırmak için tuşunu kullanın tail -n +1(ilk satırdan itibaren yazdırın, yani her şey).

Burada, adı bir nokta ile başlayan tek bir dosya dışındaki her dosyayı görmek istediğiniz anlaşılıyor. Nokta dosyaları unix altında "gizlenir": varsayılan çıktıda lsveya joker karakter eşleşmesinde görünmezler . Böylece gizli olmayan her dosyayı eşleştirmek sadece ile yapılır *.

tail -n +1 *

(Kesin olarak, tail -n +1 -- *dosya adlarından birinin bir ile başlaması durumunda gereklidir -.)


Kısa ve tatlı, teşekkürler! --Değiştirici hakkında nerede okuyabileceğimi biliyor musunuz ?
Znarkus

2
@Znarkus: --seçeneklerin sonunu belirtmek çoğu komutun itaat ettiği bir kuraldır . Örneğin tail -n +1 -- -f -gsöyler tailolduğunu -fve -g(işlenen) ve seçenekleri okumak için dosyalardır. Bu,POSIX yardımcı programı sözdizimi kılavuzunda (yardımcı program yazarlarına yönelik bir belge) kılavuzdur . Son kullanıcılar için bir okuma önerim yok, iyi bir unix öğreticisinin bir noktada bunu ele almasını beklerdim.
Gilles 'SO- kötü olmayı bırak'

Sadece bir açıklama, çünkü diğer birçok cevap kullanmayı önermektedir find, ancak daha sonra baskı biçimlendirmesiyle bazı exec kullanmaktadır: Kullanmanın basit bir yolu findve tail:: find . -type f -print0 -name "*" | xargs -0 tail -n +1 -- ( -print0vexargs -0 ve --komut da boşluklarla dosya adları ile çalışır veya ile başlayan sağlamak -)
IanH

14

Hepsini aşağıdakilerle bir arada yapabilirsiniz find:

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

Bu söyler find-type f , geçerli dizindeki ( .) ( -not) adındaki .htaccess( -name .htaccess) dışında tüm dosyaları ( ) bulmasını . Ardından -printf, yeni bir satır %pve ardından dosya adı ( ) yazdırır ve dosya ( ) catüzerinde çalışır -exec cat {} \;. Bu size şöyle bir çıktı verecektir:

test/test3
Line 1

test/test2
Line 1

test/test1
Line 1
Line 2
Line 3

Bunu sık sık yaparsanız, bir kabuk komut dosyasına veya bir işleve yapıştırmaya değer olabilir; catsTam olarak bunu yapan bir isim var:

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

Her dosya adı bağımsız değişkeninin üzerine döner, dosya adını yazdırır (kalın yeşil renkte) ve ardından dosyayı kediler:

Örnek ekran görüntüsü

Böylece komut sadece şöyle olur:

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

Diğeri daha kısaydı, öyle kabul etti. Mükemmel cevap olsa da, teşekkür ederim!
Znarkus

6

Geçerli klasördeki tüm dosyaların içeriğini göstermek için şunu deneyin:

grep -vI "\x00" -- *

ve benzer, ancak özyinelemeli:

grep -vIr "\x00" -- .

Biçimi şöyle olacaktır: filename: content.

Önerildiği gibi benzer bir biçime sahip olmak için:

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

Yan notlar:

  • \x00Yukarıdaki örneklerde NUL ( ) kullanılması, ikili dosyaların görüntülenmesini engeller ( -Igerçekte bunu yapar, ancak yine de bir desen kullanmamız gerekir).
  • Joker karakter ( *) kullanarak , gizli dosyaları otomatik olarak yok sayar .htaccess.

Ayrıca bkz: grep: dosya adını bir kez görüntüle, ardından Unix SE'de satır numaralarıyla bağlamı göster


2
Genellikle grep -r ^yeterlidir.
catpnosis

2

Bunu kullanabilirsiniz:

cat $(find Directory/ -not -name *.htaccess)

1

İnce ayar yapmak ve borularla çok fazla zaman kaybetmek istemiyorsanız, bulun ve her şey (bulabileceğiniz en güçlü araç zinciri olmasına rağmen)

bir for-loop, cat, vb. kullanmayı deneyin.


0

Çok fazla yazdırmak istiyorsanız, yinelemeli olarak kullanın (örneğin .sql uzantılı dosyalar için):

find -name "*.sql" -exec cat {} \; > all.sql
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.