объединить файлы в разных каталогах, запустив скрипт на терминале

Я новичок в UBUNTU. Как я могу объединить файлы в разных каталогах? Используя кошку, чтобы объединить их всех, это дотошная задача. Это единственный способ, которым я знаю. Заранее спасибо, Сайкат

0
задан 21 August 2015 в 12:24

1 ответ

При наличии простых текстовых файлов можно объединить их без трудностей при помощи >> оператор. Это добавит вывод предыдущей команды в конец файла, указанного после.

Основная Процедура (не для многих файлов)

Пример:

Вообразите структуру каталогов как это:

parent
 |--a
 |  \--first.txt
 \--b
    \--second.txt

Теперь contentents a/first.txt

Hello! This is my first Textfile.
   ~~some lines~~
end

и b/second.txt содержит

    ///////////////////
   //               //
  //  second file  //
 //               //
///////////////////

Таким образом, мы можем объединить его путем ввода:

$ touch merge.txt
$ cat a/first.txt >> merge.txt
$ cat b/second.txt >> merge.txt

Новый пустой файл merge.txt в текущем каталоге будет создан, и содержание файлов будет добавлено без перезаписи, как > сделал бы.

merge.txt теперь содержит:

Hello! This is my first Textfile.
   ~~some lines~~
end
    ///////////////////
   //               //
  //  second file  //
 //               //
///////////////////

Готово!

Усовершенствованные Сценарии (для покрытия многих файлов в различных каталогах)

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

Я использую верхнюю часть http://www.cyberciti.biz/faq/bash-loop-over-file/ как ссылка теперь. Наш сценарий будет в основном походить на это:

#!/bin/bash

FILES="file1
/path/to/file2"

OUTPUT="merge.txt"

for f in $FILES
do
    cat $f >> $OUTPUT
done

(О, я надеюсь, что это будет работать),

Если все Ваши файлы совместно используют что-то, что differenciate их из других файлов мы не хотим объединять, это точно, в чем мы нуждаемся. Идеально они совместно используют общего родителя или anchestor папку, где Вы не можете найти никакие другие файлы, но наш. Затем мы можем просто использовать /the/path/to/that/folder/* как селектор при определении нашего $FILES переменная. Как Вы видите в модели, мы можем установить несколько селекторов. Я надеюсь, что Вы не заботитесь слишком много о порядке, файлы будут выбраны автоматически, еще мы должны были бы думать о некотором способе указать это... Для нашего примера выше, мы могли установить:

FILES="*/*" или FILES="*/*.txt" или FILES="a/* b/*" или так и OUTPUT="merge.txt" конечно.

Некоторые последние мысли

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

Если Ваши файлы следуют за некоторым шаблоном, как p_some-thing-axy-1,p_some-thing-axy-1,p_some-thing-bxz-1, можно выбрать некоторый селектор как p_some-thing-* или около этого.

Теперь я надеюсь, что можно некоторые использовать это, потому что я отсутствую.

Удачи! :D

1
ответ дан 21 August 2015 в 22:24
  • 1
    Спасибо за редактирование относительно UTF-16 с BOM. Я wasn' t осведомленная энергия (отличающийся от большинства других инструментов GNU) мог обработать UTF-16; работы как очарование. – Ruud Helderman 15 November 2016 в 08:50

Другие вопросы по тегам:

Похожие вопросы: