Используйте cat
с перенаправлением вывода. Синтаксис: cat file [file] [[file] ...] > joined-file
.
Пример только с двумя файлами (вы можете иметь гораздо больше):
$ echo "some text in a file" > file1
$ echo "another file with some text" > file2
$ cat file1 file2 > mergedfiles
$ cat mergedfiles
some text in a file
another file with some text
Если у вас «много документов», используйте «оболочку» (шаблоны):
cat input-files-dir/* > joined-file
Это объединит все файлы в этом каталоге с текущим каталогом (не давая ему соответствовать самому выходному файлу). Он полностью независим от использования cat
и перенаправления вывода - это просто Bash, предоставляющий все файлы в качестве аргументов cat
.
Типы файлов
Он просто склеит (соединит) файлы вместе, как если бы вы делали это с бумагой и лентой. Его не волнует фактический формат файла, способный справиться с этим. Он будет работать для текстовых файлов, но не для PDF-файлов, ODT и т. Д. Что ж, он склеит их вместе, но больше не является действительным PDF / ODT.
Порядок присоединения
Как указывал Фойбос, глобализация оболочки приведет к алфавитному порядку имен файлов. Так работает Bash и shell.
Приложение об input file is output file
ошибке
Когда шаблон входных файлов совпадает с тем же файлом, что и выходной, это вызовет ошибку. Это функция безопасности. Пример: cat *.txt > out.txt
запуск во второй раз вызовет это.
Что вы можете с этим поделать:
- Выберите более конкретный шаблон, чтобы он соответствовал фактическим входным файлам, но не совпадал с выходным именем. Пример: шаблон входных файлов
*.txt
с выходным файлом output.out
не будет конфликтовать.
- Работа в разных каталогах. В приведенном выше примере я использовал отдельный
input-files-dir
каталог для размещения всех файлов и вывода в текущий рабочий каталог. Это делает невозможным получение этой ошибки.
ls
только список совпадений. Например,ls *.txt
чтобы увидеть, что соответствует.Простой способ сделать это с помощью cat:
Если вы просто выполните
cat file1 file2
команду, вы увидите оба файла в стандартном выводе. Используя>
, вы просто перенаправляете стандартный вывод в файл. Это будет работать и с другими командами.источник
Сделайте это с помощью простого цикла:
>>
добавляет в файлПримечание. Если по какой-либо причине вам нужно будет снова запустить команду, вы должны удалить ее
complete.txt
, иначе вы бы записали файл себе, что не работает.источник
cat
.cat *.txt
. Цикл for должен быть отсортирован.for
или где-либо еще в Bash.Если файлы, которые вы хотите объединить, заканчиваются
.txt
, сделайте это просто:Если каталог содержит только текстовые файлы, это также просто:
(Обратите внимание, что после создания
combined.txt
, повторное выполнение будет включать его в расширение*
, что приведет к странному поведению).Если вы хотите выбрать некоторые файлы в каталоге, а не другие, лучше всего, если имена файлов позволяют вам определить, какие из них вы хотите. Если нет, вы можете полюбоваться
find
. Но я сомневаюсь, что вам нужно идти так далеко.источник
Сценарий Thunar с настраиваемым действием, написанный cipricus, также вдохновил меня на написание подобного сценария Nautilus, и я подумал, что он может быть полезен для других, кто просматривает эти вопросы и ответы для справки по этому вопросу. Итак, вот оно:
источник
Это дополнение и вариация к другим ответам, связанным с использованием этих решений в действиях обычая Тунара.
Не все из них могут быть использованы таким образом, но некоторые из них.
Я подумал, что наиболее интересным будет возможность объединить выбранные файлы из контекстного меню Thunar .
Это отклонение от того, что было предложено Сади в комментарии к gertvdijk «s ответ :
Только выбранные файлы будут объединены. Ограничьте условия появления текстовыми файлами.
Особая благодарность Сади, чей комментарий предоставил мне наиболее четкое и актуальное решение моей проблемы.
Я принял gertvdijk «s ответ окончательным. Мало того, что это было поводом для комментария Сади, но, похоже, он представляет дополнительную ценность для других, предоставляя хорошо аргументированное и полное решение (хотя и несколько выше моих навыков чтения CLI).
источник
Вы можете попробовать
find
команду также,Он находит
.txt
файлы в текущем каталоге и выполняетcat
команду для каждого найденного файла. Наконец весь вывод был перенаправлен на имя файлаfile
(созданный непосредственно внутри текущего).Объяснение:
источник
Вы также можете просто использовать онлайн-утилиту, такую как merge-files-online.com
источник