Yanıtlar:
Bu, çıktıyı all.txt dosyasına ekler
cat *.txt >> all.txt
Bu, all.txt dosyasının üzerine yazılır
cat *.txt > all.txt
echo *.txt | xargs cat > all.txt
Şimdiye kadar verilen tüm çözümler için kabuğun dosyaların birleştirilme sırasına karar verdiğini unutmayın. Bash için, IIRC, bu alfabetik sıraya göre. Sipariş önemliyse, dosyaları uygun şekilde adlandırmanız (01file.txt, 02file.txt, vb ...) veya her dosyayı birleştirilmesini istediğiniz sırayla belirtmeniz gerekir.
$ cat file1 file2 file3 file4 file5 file6 > out.txt
Windows kabuk komutu type
şunları yapabilir:
type *.txt >outputfile
Type type
komutu ayrıca, >
yönlendirme operatörü tarafından yakalanmayan (ancak konsolda görünecek) stderr'a dosya adları yazar .
copy
Dosyaları birleştirmek için Windows kabuğunu kullanabilirsiniz .
C:\> copy *.txt outputfile
Yardımdan:
Dosya eklemek için, hedef için tek bir dosya, ancak kaynak için birden fazla dosya belirtin (joker karakterler veya dosya1 + dosya2 + dosya3 biçimini kullanarak).
Dikkatli olun, çünkü bu yöntemlerin hiçbiri çok sayıda dosyayla çalışmaz. Şahsen, bu hattı kullandım:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
DÜZENLEME: Birisi yorumlar dedi gibi, yerine $(ls | grep ".txt")
ile$(ls *.txt)
EDIT: @gnourf_gnourf uzmanlığı sayesinde glob kullanımı bir dizindeki dosyaları yinelemek için doğru yoldur. Sonuç olarak, küfür ifadeleri sever $(ls | grep ".txt")
tarafından değiştirilmelidir *.txt
(makalesine bakın burada ).
Güzel çözüm
for i in *.txt;do cat $i >> output.txt;done
for i in $(ls *.txt);do cat $i >> output.txt;done
?
ls | grep
ciddi derecede kötü bir antipattern ).
ls *.txt
çok fazla dosya (Argüman listesi çok uzun hatası) varsa başarısız?
kabuk ile en pragmatik yol kedi emridir. diğer yollar arasında,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
cat
yöntemin tümü kullanılarak bitişik dosyalardan son satır ve ilk satır birleştirilir.
Bu yaklaşıma ne dersiniz?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
-maxdepth 1
belirttiğinden, find
komuta eklemeniz gerekebilir .
sort -u --output="$OUTPUT_FILE" --files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)
type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension]
Örneğin:
type C:\*.txt > C:\1\all.txt
Bu, C: \ Klasöründeki tüm txt dosyalarını alır ve all.txt adına göre C: \ 1 Klasörüne kaydeder
Veya
type [source folder]\* > [destination folder]\[file name].[File extension]
Örneğin:
type C:\* > C:\1\all.txt
Bu, klasörde bulunan tüm dosyaları alır ve C: \ 1 \ all.txt dosyasına İçerik koyar
Bunu şöyle yapabilirsiniz:
cat [directory_path]/**/*.[h,m] > test.txt
{}
bulmak istediğiniz dosyaların uzantısını eklemek için kullanırsanız , bir sıralama sorunu vardır.
All.txt dosyasının all.txt içine girdiği bir sorunla karşılaştığınızda, all.txt dosyasının var olup olmadığını kontrol etmeyi deneyebilirsiniz, varsa kaldırın
Bunun gibi:
[ -e $"all.txt" ] && rm $"all.txt"
cat *.txt > all.txt
>
komutu >>
mevcut dosyaya veri eklerse all.txt'nin üzerine yazar
tüm bunlar kötü ....
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
kolay şeyler.
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;