как объединить все (текстовые) файлы в каталоге в один?

<p>у меня есть 14 файлов, которые являются частью одного текста. я хотел бы объединить их в один. как это сделать?</p>

<p>технически это то, что должен делать <code>cat</code> ("concatenate"), хотя большинство людей просто используют его для вывода файлов на стандартный вывод. если вы дадите ему несколько имен файлов, он выведет их все последовательно, а затем вы сможете перенаправить их в новый файл; в случае всех файлов просто используйте <code>*</code> (или <code>/path/to/directory/*</code> если вы еще не в каталоге) и ваша оболочка расширит его до всех имен файлов</p><pre><code>$ cat  > merged-file 

если ваши файлы не находятся в одном каталоге, вы можете использовать команду find до объединения:find /path/to/directory/ -name .csv -print0 | xargs -0 -i file cat file > merged.file очень полезно, когда ваши файлы уже упорядочены, и вы хотите объединить их, чтобы проанализировать их.более переносимо:find /path/to/directory/ -name .csv -exec cat {} + > merged.file это может или не может сохранить порядок файлов.

команда$ cat * > merged-file </code></pre><p>фактически имеет нежелательный побочный эффект включения 'объединенного-файла' в конкатенацию, создавая файл-разборщик. чтобы обойти это, либо напишите объединенный файл в другой каталог;</p><pre><code>$ cat  > ../merged-file или используйте сопоставление с образцом, которое будет игнорировать объединенный файл;$ cat *.txt > merged-file </code></pre>

<p>как и другие здесь, говорят ... вы можете использовать <code>cat</code></p><p>допустим, у вас есть:</p><pre><code>~/file01 ~/file02 ~/file03 ~/file04 ~/filea ~/fileb ~/filec ~/filed </code></pre><p>и вы хотите только <code>file01</code> до <code>file03</code> и <code>filea</code> to <code>filec</code>:</p><pre><code>cat ~/file01 ~/file02 ~/file03 ~/filea ~/fileb ~/filec > merged-file </code></pre><p>или, используя расширение скобки:</p><pre><code>cat ~/file0{1..3} ~/file{a..c} > merged-file </code></pre><p>или, используя причудливое расширение фигурных скобок:</p><pre><code>cat ~/file{0{1..3},{a..c}} > merged-file </code></pre><p>или вы можете использовать цикл <code>for</code>:</p><pre><code>for i in file0{1..3} file{a..c}; do cat ~/"$i"; done > merged-file </code></pre>

<p>вы можете указать <code>pattern</code> файла, а затем объединить их все следующим образом:</p><pre><code>cat *pattern* >> mergedfile </code></pre>

<p>другой вариант - это sed:</p><pre><code>sed r 1.txt 2.txt 3.txt > merge.txt </code></pre><p>или...</p><pre><code>sed h 1.txt 2.txt 3.txt > merge.txt </code></pre><p>или...</p><pre><code>sed -n p 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here </code></pre><p>или без перенаправления ...</p><pre><code> sed wmerge.txt 1.txt 2.txt 3.txt </code></pre><p>обратите внимание, что в последней строке также пишется merge.txt (не wmerge.txt!). вы можете использовать w "merge.txt", чтобы избежать путаницы с именем файла, и -n для вывода без вывода сообщений.</p><p>конечно, вы также можете сократить список файлов с подстановочными знаками. например, в случае нумерованных файлов, как в приведенных выше примерах, вы можете указать диапазон в фигурных скобках следующим образом:</p><pre><code>sed -n w"merge.txt" {1..3}.txt </code></pre>