5

Скажем, у меня есть структура каталогов, которая выглядит следующим образом:

file1.txt
folder1/
    file2.txt
folder2/
    file3.txt

Как можно объединить file1.txt, file2.txt и file3.txt в один файл?

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

5 ответов5

8
cat file1.txt folder1/file2.txt folder2/file3.txt > single.txt
4

О какой ОС мы говорим?

Предполагая Windows, используйте следующие команды (при необходимости подставляя file/foldernames):

C:\> ren > TARGET.TXT 2> nul
C:\> cd MyFolder
C:\MyFolder> for /R %i in (*) do copy /b \TARGET.TXT + "%i" \TARGET.TXT

Первая строка создает (или стирает) файл C:\TARGET.TXT используя встроенные команды. Третья команда просматривает каждый файл в текущем каталоге и его подкаталогах и добавляет их в целевой файл (обратите внимание, что он не будет включать скрытые файлы). Он использует ключ /b для копирования их в двоичном формате на случай, если некоторые файлы не просто текстовые.

3

copy /y file1.txt+folder1\file2.txt+folder2\file.txt destination.txt должен помочь

К вашему сведению /y отключает подсказку

2

Предполагая, что вам нужен каждый файл в каждом подкаталоге, или что есть какой-то отличительный поисковый идентификатор, я просто получил следующее для работы. Обратите внимание, что в этом примере я использовал порт команд unix find и cat, перенесенных в систему Windows. Я не знаю, сколько лет этому конкретному порту Windows, поэтому пробег может отличаться.

find . -type f -exec cat {} ; | cat > bigfile.txt

При использовании Ubuntu 10.10 и оболочки bash я обнаружил, что следующий синтаксис работает лучше, потому что find "found" bigfile.txt, если он создан в пути поиска, и потому что некоторые части команды должны быть экранированы. Обратите внимание, что различия между этим и портом Windows заключаются в одинарные кавычки в скобках, обратная косая черта перед точкой с запятой и создание файла контейнера на одну папку вверх.

find . -type f -exec cat '{}' \; | cat > ../bigfile.txt
2

Мне удалось заставить следующее работать на Mac OS X:

find . -type f -exec cat {} > ../results.txt \;

Однако я не совсем понимаю, почему это работает, поэтому было бы полезно, если бы кто-то мог объяснить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .