Відповіді:
Використовуйте bash вбудоване перенаправлення (tldp) :
cat file2 >> file1
sudoдо catкоманди (і введіть облікові дані, якщо буде запропоновано).
teeпрограму: cat 1 | tee -a 2 3. Після перемикання --append(або -aна короткий час) ви можете розмістити скільки завгодно файлів .
cat file2 >> file1
>>Оператор додає висновок в зазначений файл або створює зазначений файл , якщо він не існує.
cat file1 file2 > file3
Це об'єднує два або більше файлів в один. Ви можете мати стільки вихідних файлів, скільки вам потрібно. Наприклад,
cat *.txt >> newfile.txt
Оновлення 20130902
У коментарях eumiro пропонує "не намагайся cat file1 file2 > file1". Причина цього може не призвести до очікуваного результату в тому, що файл, який отримує переадресацію, готується до того, як >буде виконана команда ліворуч від . У цьому випадку спочатку file1обрізається до нульової довжини та відкривається для виведення, потім catкоманда намагається об'єднати файл, який зараз має нульову довжину, та вміст file2у file1. У результаті виходить, що оригінальний вміст програми file1втрачається, а на його місці - копіяfile2 що, ймовірно, не є тим, що очікувалося.
Оновлення 20160919
У коментарях tpartee пропонує посилання на резервну інформацію / джерела. Для авторитетного посилання я направляю доброго читача на сторінку sh man на linuxcommand.org, де зазначено:
Перед виконанням команди його введення та вихід можуть бути перенаправлені за допомогою спеціального позначення, інтерпретованого оболонкою.
Хоча це і говорить читачеві, що вони повинні знати, це легко пропустити, якщо ви не шукаєте цього і розбираєте заяву слово за словом. Найважливіше слово тут «раніше». Перенаправлення завершено (або не вдалося) до виконання команди.
У прикладі випадку cat file1 file2 > file1оболонка спочатку виконує перенаправлення, щоб ручки вводу / виводу знаходилися на місці в середовищі, в якому команда буде виконуватися до її виконання.
Більш приємну версію, в якій пріоритет перенаправлення висвітлюється досить довго, можна знайти на веб-сайті Яна Аллена у формі навчальних програм Linux. Його сторінка Примітки про перенаправлення вводу / виводу має багато що сказати на цю тему, включаючи зауваження, що перенаправлення працює навіть без команди. Передача цього до оболонки:
$ >out
... створює порожній файл з іменем. Оболонка спочатку встановлює перенаправлення вводу / виводу, потім шукає команду, не знаходить жодної і завершує операцію.
cat file1 file2 > file1- це не спрацює, як ти, напевно, чекаєш.
>>якої буде модифікований файл file1. T.Rob зробив набагато кращу роботу, пояснюючи свою відповідь, а не просто бігаючи, щоб подати щось, що фактично було невірним. Виходячи з тексту запитання, я вважаю, що cat file1 file2 > file3це відповідна команда, яку шукав @asir.
>виконується спочатку. Таким чином, виконання cat file1 file2 > file1спочатку спершу клобує, file1а потім спробує скопіювати файл, що має нульову довжину, на себе. Це має сенс, коли ви думаєте про порядок, в якому могли б і повинні відбуватися операції, але досить тонкий, щоб він здивував багатьох людей зненацька. Тож якщо нічого іншого, ви та eumiro спонукали до подальшого вдосконалення відповіді. Дякую за це!
>> додається до нього та > замінює його.
Примітка : якщо вам потрібно використовувати судо , зробіть це:
sudo bash -c 'cat file2 >> file1'
Звичайний метод простого попередження sudoдо команди не вдасться, оскільки ескалація привілеїв не переходить у вихідне перенаправлення.
cat file2 | sudo tee -a file1 > /dev/null
Для довідки, використання ddrescue забезпечує переривчастий спосіб досягнення завдання, якщо, наприклад, у вас є великі файли та потрібно зробити паузу, а потім виконати її в якийсь пізній момент:
ddrescue -o $(wc --bytes file1 | awk '{ print $1 }') file2 file1 logfile
logfileЦе важливий біт. Ви можете перервати процес Ctrl-Cі відновити його, вказавши знову таку ж команду, і ddrescue прочитає logfileта відновиться з того місця, де він припинився. -o AПрапор говорить ddrescue , щоб почати з байта А в вихідному файлі ( file1). Тож wc --bytes file1 | awk '{ print $1 }'просто витягує розмір file1у байтах (ви можете просто вставити у висновок з, lsякщо хочете).
Як вказують ngks у коментарях, мінусом є те, що ddrescue, мабуть, не буде встановлений за замовчуванням, тому вам доведеться встановлювати його вручну. Іншим ускладненням є те, що у ваших сховищах можуть бути дві версії ddrescue: для отримання додаткової інформації див. Це питання askubuntu . Ви хочете, щоб версія GNU ddrescue, а в системах на базі Debian - пакет з назвою gddrescue:
sudo apt install gddrescue
Для інших дистрибутивів перевірте систему управління пакунками на наявність GNU версії ddrescue.
Ще одне рішення:
cat file1 | tee -a file2
tee має перевагу, яку ви можете додати до потрібної кількості файлів, наприклад:
cat file1 | tee -a file2 file3 file3
буде додавати вміст file1до file2, file3і file4.
На чоловіковій сторінці:
-a, --append
append to the given FILEs, do not overwrite
catЦе може бути простим рішенням, але це стає дуже повільним, коли ми стискаємо великі файли find -print- це врятувати вас, хоча вам доведеться використовувати кота один раз.
amey@xps ~/work/python/tmp $ ls -lhtr
total 969M
-rw-r--r-- 1 amey amey 485M May 24 23:54 bigFile2.txt
-rw-r--r-- 1 amey amey 485M May 24 23:55 bigFile1.txt
amey@xps ~/work/python/tmp $ time cat bigFile1.txt bigFile2.txt >> out.txt
real 0m3.084s
user 0m0.012s
sys 0m2.308s
amey@xps ~/work/python/tmp $ time find . -maxdepth 1 -type f -name 'bigFile*' -print0 | xargs -0 cat -- > outFile1
real 0m2.516s
user 0m0.028s
sys 0m2.204s
time (find . -maxdepth 1 -type f -name 'bigFile*' -print0 | xargs -0 cat -- > outFile1)і вона повинна створювати подібні результати, як лише для вашої кішки.
Ви можете це зробити і без cat, хоча, якщо чесно cat, читабельніше:
>> file1 < file2
>>Приєднує STDIN до file1і <відвалів file2на STDIN .