Я сохранил много документов в формате TXT. Я хочу напечатать их вместе, поэтому сначала я хочу, чтобы они были вместе в одном файле. Порядок не имеет значения в этом случае.
Мне нужно решение, которое не включает в себя ввод имен файлов, которые должны быть объединены, а решение, которое просто объединит все текстовые файлы в папке.
Могу ли я сделать это с помощью команды или некоторого графического интерфейса?
Я посмотрел здесь . Не знаю, как использовать join
.
Используйте 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
[ 1120] Это объединит все файлы в этом каталоге с текущим каталогом (не позволяя ему соответствовать самому выходному файлу). Он полностью независим от использования cat
и перенаправления вывода - это просто Bash, предоставляющий все файлы в качестве аргументов cat
.
Он будет просто склеивать (объединять) файлы вместе, как вы это делали бы с бумагой и лентой. Его не волнует фактический формат файла, способный справиться с этим. Он будет работать для текстовых файлов, но не для PDF-файлов, ODT и т. Д. Что ж, он склеит их вместе, но больше не является действительным PDF / ODT.
Как указал Фойбос , глобализация оболочки приведет к алфавитному порядку имен файлов. Вот как работает Bash и shell.
input file is output file
Если шаблон входных файлов совпадает с тем же файлом, что и вывод, это вызовет ошибку. Это функция безопасности. Пример: cat *.txt > out.txt
запустить во второй раз будет причиной этого.
Что вы можете с этим поделать:
*.txt
с выходным файлом output.out
не будет конфликтовать. input-files-dir
для размещения всех файлов и вывода в текущий рабочий каталог. Это делает невозможным получение этой ошибки. Простой способ сделать это с помощью cat:
cat file1 file2 > joined_file
Если вы просто выполните cat file1 file2
, вы увидите оба файла в стандартном выводе. Используя >
, вы просто перенаправляете стандартный вывод в файл. Это будет работать и с другими командами.
Сделайте это простым циклом:
for i in *.txt; do cat "$i" >> complete.txt; done
>>
добавляет к файлу.
Примечание. Если по какой-то причине вам необходимо снова запустить команду, вам нужно удалить complete.txt
, в противном случае вы запишите файл себе, что не работает.
Это дополнение и вариация к другим ответам, связанным с применением этих решений в действиях обычая Тунара.
Не все из них могут быть использованы таким образом, но некоторые из них.
Я подумал, что наиболее интересным будет иметь возможность объединять выбранные файлы из контекстного меню Тунара .
Это отклонение от того, что было предложено Сади в комментарии к ответу gertvdijk :
cat %N > JoinedFile
Только выбранные файлы будут объединены. Ограничьте условия отображения текстовыми файлами.
Особая благодарность Сади , чей комментарий предоставил мне наиболее четкое и ясное решение моей проблемы.
Я принял gertvdijk ответ как окончательный. Мало того, что это было поводом для комментария Сади, но, похоже, он представляет дополнительную ценность для других, предоставляя хорошо аргументированное и полное решение (хотя и несколько превосходящее мои навыки чтения CLI).
Если файлы Вы хотите объединить весь конец в .txt
, сохраните это простым:
cat *.txt > combined.txt
Если каталог только содержит текстовые файлы, это также просто:
cat * > combined.txt
(Обратите внимание на это, после того как Вы создаете combined.txt
, выполнение его снова включало бы его в расширение *
, продвижение к нечетному поведению).
Если Вы хотите выбрать некоторые файлы в каталоге и не других, лучше, если имена файлов позволяют Вам различать, которые Вы хотите. В противном случае можно стать необычными с find
. Но я сомневаюсь, что необходимо пойти настолько далеко.
Thunar сценарий настраиваемого действия , написанный cipricus , также вдохновил меня на написание подобного сценария Nautilus , и я подумал, что он может быть полезен для других, кто смотрит на этот вопрос для справки по этому вопросу. Итак, вот оно:
#!/bin/sh
#Nautilus Script to join selected text files in a single file and open the joined file with default text editor
#
IFS=\n'
FILENAME="JoinedFile_$(date +%Y-%m-%d-%H-%M-%S).txt"
cat "$@" > "$FILENAME"
xdg-open "$FILENAME"
Вы также можете попробовать команду find
,
find . -name "*.txt" -type f -exec cat {} + > file
. Он найдет .txt
файлы в текущем каталоге и выполнить команду cat
для каждого найденного файла. Наконец, весь вывод был перенаправлен на имя файла file
(созданное непосредственно внутри текущего).
Объяснение:
. # current directory
-name # helps to find only .txt files.
-type f # Only files
-exec cat {} + # helps to run cat command on the founded .txt files.
> # Output redirection operator
file # to store final output.
Вы также можете просто использовать онлайн-утилиту, такую как merge-files-online.com