Yanıtlar:
ls *.txt | xargs cat >> all.txt
her dosyadan sonra yeniden oluşturmak yerine all.txt dosyasına ekleneceği için biraz daha iyi çalışabilir.
Bu arada, cat *.txt >all.txt
aynı zamanda işe yarayacaktı. :-)
Dosya adlarınızdan bazıları ', "içeriyorsa veya ayırıcı sorunuxargs
nedeniyle boşluk başarısız olursa
Genel xargs
olarak -0 olmadan asla geri gelip bir gün sizi ısırır.
Bunun yerine GNU Paralel kullanmayı düşünün:
ls *.txt | parallel cat > tmp/all.txt
veya isterseniz:
ls *.txt | parallel cat >> tmp/all.txt
GNU Paralel hakkında daha fazla bilgi edinin http://www.youtube.com/watch?v=OpaiGYxkSuQ
all.txt
aynı dizindeki bir dosya olduğundan, aynı dosyadan aynı dosyaya yazmak istediğinde kedi karışır.
Diğer yandan:
ls *.txt | xargs cat > tmp/all.txt
Bu, geçerli dizininizdeki metin dosyalarından bir alt dizindeki all.txt dosyasına (dahil değildir *.txt
) okunacaktır .
Komut satırı uzunluğu sınırlamasıyla da karşılaşabilirsiniz. Kullanım nedeninin bir kısmı xargs
, girdiyi güvenli komut satırı boyutundaki parçalara ayırmasıdır. Bu nedenle, dizinde yüz binlerce .txt dosyanızın olduğunu düşünün. ls *.txt
başarısız olur. Yapmanız gerekecek
ls | grep .txt$ |xargs cat > /some/other/path/all.txt
.txt$
Bu durumda, .txt ile biten her şeyle eşleşen normal bir ifadedir (bu nedenle *.txt
, tam olarak aynı değildir , çünkü adlı bir dosyanız varsa atxt
, *.txt
eşleşmez, ancak normal ifade olur.)
Başka bir yolun kullanılması, diğer yanıtların işaret ettiği gibi, all.txt öğesinin desenle eşleştirilmesidir, *.txt
böylece girdi ve çıktı arasında bir çakışma olacaktır.
'
Adlarında herhangi bir dosya varsa (ve bu unmatched single quote
hatanın nedeni olabilir ),
ls | grep --null .txt$ | xargs -0 cat > /some/other/path/all.txt
--Null seçeneği grep'e çıktıyı \0
varsayılan satırsonu yerine (aka null) karakterle ayrılmış olarak kullanmasını söyler ve -0
xargs seçeneği de girdisinin aynı biçimde olmasını beklemesini söyler. İçinde yeni satırları olan dosya adları olsa bile bu işe yarar.
ls
bunun için . Eğer gerçekten kullanamıyorsanız,cat *.txt >all.txt
oprintf '%s\0' *.txt | xargs -r0 cat >all
zamanmv all all.txt
dosyanın kendisine referansta bulunmasını önlemek için ve sonra deneyin .