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.txtaynı 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 xargsolarak -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 *.txtbaş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, *.txteş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, *.txtböylece girdi ve çıktı arasında bir çakışma olacaktır.
'Adlarında herhangi bir dosya varsa (ve bu unmatched single quotehatanın nedeni olabilir ),
ls | grep --null .txt$ | xargs -0 cat > /some/other/path/all.txt
--Null seçeneği grep'e çıktıyı \0varsayılan satırsonu yerine (aka null) karakterle ayrılmış olarak kullanmasını söyler ve -0xargs 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.
lsbunun için . Eğer gerçekten kullanamıyorsanız,cat *.txt >all.txtoprintf '%s\0' *.txt | xargs -r0 cat >allzamanmv all all.txtdosyanın kendisine referansta bulunmasını önlemek için ve sonra deneyin .