Linux как склеить файл

Справочная информация

Необходимость в использовании инструментов разрезания и склейки файлов в Linux у меня ранее не возникало. Для передачи больших файлов с целью обмена мной успешно использовались файлообменные ресурсы, например, те же depositfiles или filefactory, предоставляющие время хранения не менее 90 суток. В связи с тем, что depositfiles предоставил свой менеджер файлов, с помощью которого успешно осуществлялась операция Upload, этот ресурс и использовался чаще всего.

Радикальным образом ситуация изменилась буквально за последние 2 дня. Загруженный мной для обмена файл был в течение дня удалён. Так как администрация этого сервиса вправе удалить любой файл без объяснения причин, то пришлось вернуться к широко использовавшемуся мной ранее файлообменнику Sendspace. А так как этот ресурс позволяет передать файлы не более 300 Мб, то у меня возникла проблема передачи файлов размером в 1,5 Гб.

Другой возможной необходимостью разбить и склеить файл является принципиальная невозможность записать на флэшку с файловой системой FAT32 файл размером более 4 Гб, что обусловлено свойствами самой файловой системы FAT32.

Поиск способов в Linux привёл в инструкции:

Разбить на кусочки по 10 Гб, можно такой командой:

split -b 10G big_file.ext
при этом имена файлов будут типа: xaa, xab, xac..

Далее копируем их к себе

Склеиваем в Linux:

cat xaa xab xac > big_file.ext

Склеиваем в Windows:
copy /B xaa+xab+xac big_file.ext

При всём уважении к терминалу хотелось бы чего-то более привычного, тем более, что мои респонденты, несмотря на их работу в Linux, вряд ли были бы в восторге от необходимости склеивать переданные им файлы в терминале.

Поискав в центре приложений своего Linux Mint по запросу в строке поиска split было найдено 2 варианта решения проблемы.

1 вариант – Gmone Split

Так как в Linux Mint ПО унифицировано для различных оболочек, то данное ПО присутствует и для Cinnamon, и для MATE и XFCE. Естественно, что данное ПО должно быть установлено как у Вас, так и тех, кому Вы будете передавать обработанные этим ПО файлы. После установки в меню программ появляется отображение, например,

При запуске программы отображается мастер (другими словами – Wizard), который будет «руководить» Вашими дальнейшими действиями.

Split a file – разрезать файл

Merge several files – склеить несколько файлов

Слева отображается полное меню, в котором выполняемая операция подсвечивается выделением:

В нижней части справа отображены кнопки дальнейших действий.

Читайте также:  Make floppy image linux

Если действие указано, то кнопка «Продолжить» становится активной. Если нажать «Отмена», то доступно главное окно программы, до этого «прикрытое» мастером.

В окне выбора файлов укажите файл, а затем способ его разбиения:

По умолчанию предлагается указать, на сколько частей разбивать выбранный файл. При этом размер каждого фрагмента будет определён программой самостоятельно. Но если нажать на стрелочку справа, то отобразятся и другие варианты:

В поле слева необходимо указать количество этих самых частей или размер в байтах, Кб, Мб, Гб и т.д.

Далее предлагается выбрать рабочий алгоритм:

Признаться откровенно, мной был испробован вариант только «Общий». Про назначение других вариантов ничего не могу сказать.

Перед самим процессом предлагается проверить выбранные настройки и при необходимости внести изменения, если где-то была допущена ошибка (размер отдельного фрагмента или способа разбиения):

Процесс разбиения файла отображается в графическом режиме:

На выходе Вы получите необходимое количество фрагментов файла с расширениями .001, .002, .003 .

Процесс склейки производится аналогично. Выбрать операцию «Merge several files» и указать файл с расширением .001

На выходе получится склеенный файл.

2 вариант – HJSplit

Этот вариант найден со ссылки от консольной утилиты LXSplit, в описании которой указано на её совместимость с программной HJSplit

Утилита HJSplit мне была знакома ещё со времён пользования Windows. Официальный сайт этой программы – http://hjsplit.org, а автором является компания freebyte, на сайте которой можно найти полезное для пользователей Windows бесплатное ПО.

Само собой разумеется, что Ваши респонденты также должны установить у себя такую же программу.

Пользователи Linux обращаются к секции Линукса и скачивают архив hjsplitlx.tar.gz В составе архива имеется сама программа и описание в виде файла txt «что это такое и с чем его едят».

Собственно программой является файл hjsplit. Проверьте, имеется ли у Вас указание на необходимость запуска этого файла как программы:

Интерфейс интуитивно понятен. Split – разрезать, Join – склеить. Сравнением (Compare) и контрольными суммами (Checksum) Вы вряд ли будете заниматься.

Нажимаете «Split», указываете файл, размер каждого фрагмента и нажимаете кнопку «Start».

Процесс отображается графическим индикатором, а по завершении выводится информационное сообщение.

Процесс склейки производится аналогично. Запускается программа, выбирается «Join», указывается файл с расширением .001 и нажимается кнопка «Start».

3 вариант – File Splitter and Joiner (TFSplit-Java)

File Splitter and Joiner поможет разделить большой файл на несколько частей меньшего размера (минимальный 8Кб), а затем объединить их в новый файл идентичный исходному. Поддерживается работа с файлами всех форматов и практически любого размера, файл разделяется по заданному размеру (Гб/Мб/Кб) или по количеству частей (размер частей будет вычислен автоматически).

Читайте также:  Linux shared library linking

Источник

Объединение файлов командой cat

Команда cat - объединяем файлы

Команду cat в большинстве случаев используют только для просмотра файлов. На самом деле одно из ее предназначений это конкатенация (объединение) файлов. А название команды происходит от слова catenate (сцепить), то есть присоединение одного после другого.

Под объединением файлов понимается их соединение. Например, если мы имеем два текстовых файла и в одном из них записана строка:
My text file 1

А в другом:
My text file 2

То после объединения мы получим файл с двумя строками:
My text file 1
My text file 2

То есть происходит простое соединение файлов. К содержимому одного добавляется содержимое другого. Это касается не только текстовых файлов, но и всех остальных (бинарных, например).

Чтобы объединить два файла командой cat нужно просто указать в качестве аргументов названия этих файлов и направить результат выполнения в новый файл. Например, мы хотим объединить два файла file1 и file2, а результат записать в новый файл file12. Тогда мы должны выполнить следующую команду:

Вы можете объединить неограниченное количество файлов. Например, чтобы объединить четыре файла и записать результат в файл myfile, выполните команду:

cat file1 file2 file3 file4 > myfile

Источник

Concatenating multiple text files into a single file in Bash

What is the quickest and most pragmatic way to combine all *.txt file in a directory into one large text file? Currently I’m using windows with cygwin so I have access to BASH. Windows shell command would be nice too but I doubt there is one.

12 Answers 12

This appends the output to all.txt

you may run into a problem where it cats all.txt into all.txt. I have this problem with grep sometimes, not sure if cat has the same behavior.

@rmeador yes, that is true, if all.txt already exists you will have this problem. This problem is solved by providing the output file with a different extension, or moving all.txt to a different folder.

Just remember, for all the solutions given so far, the shell decides the order in which the files are concatenated. For Bash, IIRC, that’s alphabetical order. If the order is important, you should either name the files appropriately (01file.txt, 02file.txt, etc. ) or specify each file in the order you want it concatenated.

$ cat file1 file2 file3 file4 file5 file6 > out.txt 

The Windows shell command type can do this:

Type type command also writes file names to stderr, which are not captured by the > redirect operator (but will show up on the console).

Читайте также:  Create user name linux

Just be aware that if you put the output file in the same directory as the original file it will cause a duplication because it will also combine the new output file twice.

You can use Windows shell copy to concatenate files.

To append files, specify a single file for destination, but multiple files for source (using wildcards or file1+file2+file3 format).

This as the IMHO cleanest solution with basically no side effects that beginners could trip over unfortunately does not get appreciated enough 🙁

Worked pretty well, except at the very end of my file I got a weird SUB special unicode character. Deleting it is pretty easy programmatically but not sure why that happened.

Be careful, because none of these methods work with a large number of files. Personally, I used this line:

for i in $(ls | grep ".txt");do cat $i >> output.txt;done 

EDIT: As someone said in the comments, you can replace $(ls | grep «.txt») with $(ls *.txt)

EDIT: thanks to @gnourf_gnourf expertise, the use of glob is the correct way to iterate over files in a directory. Consequently, blasphemous expressions like $(ls | grep «.txt») must be replaced by *.txt (see the article here).

Good Solution

for i in *.txt;do cat $i >> output.txt;done 

Mandatory ParsingLs link, together with a downvote (and you deserve more than one downvote, because ls | grep is a seriously bad antipattern).

Got an upvote from me because it allows for arbitrary testing/ operations by file name prior to output and it’s quick and easy and good for practice. (In my case I wanted: for i in *; do echo -e «\n$i:\n»; cat $1; done )

find . -type f -name '*.txt' -exec cat <> + >> output.txt 

Since OP says the files are in the same directory, you may need to add -maxdepth 1 to the find command.

This should be the correct answer. It will work properly in a shell script. Here is a similar method if you want output sorted: sort -u —output=»$OUTPUT_FILE» —files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)

This is a very flexible approach relying on all the strengths of the find . My favourite! Surely cat *.txt > all.txt does the job within the same directory (as pointed out above). To me, however, becoming comfortably fluent in using find has been a very good habit. Today they’re all in one folder, tomorrow they have multiple file-endings across nested directory hierarchies. Don’t overcomplicate, but also, do make friends with find . 🙂

Источник

Оцените статью
Adblock
detector