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.Его страница I / O Redirection Notes может многое рассказать по этой теме, включая наблюдение, что перенаправление работает даже без команды.Передача этого в оболочку:
$ >out
... создает пустой файл с именем out.Оболочка сначала устанавливает перенаправление ввода / вывода, затем ищет команду, не находит ни одной и завершает операцию.