Как записать содержимое нескольких файлов в один в Unix?

Предположим, в каталоге есть несколько файлов, например:

file1.txt  
file2.txt
file3.txt
file4
file5
fab
text1 

Мне нужно удалить файлы с .txt и добавить содержимое оставшихся файлов с именем, начинающимся с файл ( файл4 , файл5 ) в один файл.

Я попробовал следующую команду, но она добавляет все 5 файлов в один файл.

ls -ltr file*|grep -vE ".txt" | cat * > final
0
21.11.2018, 23:36
3 ответа

Попробуйте это

#!/bin/bash

find . -name '*.txt' -exec rm {} +

for f in file*
do
    cat $f >> final_file
done

В одну строку, не удаляя файлы .txt , но игнорируя их для cat

$ find . -name 'file*' ! -name '*.txt' -exec cat {} \; > final
0
28.01.2020, 02:35

Если у вас есть bash, вы можете использовать следующее:

shopt -s extglob
cat !(*.txt) > final

Или используя zsh:

setopt extended_glob
cat ^*.txt > final
2
28.01.2020, 02:35

find .! -name '*.txt' | xargs cat >> final

0
28.01.2020, 02:35

Теги

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