Respostas:
Isso anexa a saída a all.txt
cat *.txt >> all.txt
Isso substitui o arquivo all.txt
cat *.txt > all.txt
echo *.txt | xargs cat > all.txt
Lembre-se, para todas as soluções fornecidas até agora, o shell decide a ordem em que os arquivos são concatenados. Para Bash, IIRC, essa é a ordem alfabética. Se a ordem for importante, você deve nomear os arquivos adequadamente (01file.txt, 02file.txt, etc ...) ou especificar cada arquivo na ordem em que deseja concatenar.
$ cat file1 file2 file3 file4 file5 file6 > out.txt
O comando do shell do Windows type
pode fazer isso:
type *.txt >outputfile
O type
comando Type também grava nomes de arquivos no stderr, que não são capturados pelo >
operador de redirecionamento (mas serão exibidos no console).
Você pode usar o shell do Windows copy
para concatenar arquivos.
C:\> copy *.txt outputfile
Da ajuda:
Para anexar arquivos, especifique um único arquivo para o destino, mas vários arquivos para a origem (usando caracteres curinga ou formato arquivo1 + arquivo2 + arquivo3).
Tenha cuidado, porque nenhum desses métodos funciona com um grande número de arquivos. Pessoalmente, usei esta linha:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
EDIT: Como alguém disse nos comentários, você pode substituir $(ls | grep ".txt")
por$(ls *.txt)
EDIT: graças à experiência @gnourf_gnourf, o uso de glob é a maneira correta de iterar arquivos em um diretório. Consequentemente, expressões blasfemas como $(ls | grep ".txt")
devem ser substituídas por *.txt
(veja o artigo aqui ).
Boa solução
for i in *.txt;do cat $i >> output.txt;done
for i in $(ls *.txt);do cat $i >> output.txt;done
?
ls | grep
negativo , porque é um antipadrão muito ruim).
ls *.txt
falha não ocorreria se houver muitos arquivos (erro da lista de argumentos muito longo)?
a maneira mais pragmática com o shell é o comando cat. outras maneiras incluem,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
cat
método acima concatenará a última e a primeira linha dos arquivos adjacentes.
Que tal essa abordagem?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
-maxdepth 1
o find
comando.
sort -u --output="$OUTPUT_FILE" --files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)
type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension]
Por exemplo:
type C:\*.txt > C:\1\all.txt
Isso pegará todos os arquivos txt na pasta C: \ e salvará na pasta C: \ 1 com o nome de all.txt
Ou
type [source folder]\* > [destination folder]\[file name].[File extension]
Por exemplo:
type C:\* > C:\1\all.txt
Isso pega todos os arquivos presentes na pasta e coloca lá Conteúdo em C: \ 1 \ all.txt
Você pode fazer assim:
cat [directory_path]/**/*.[h,m] > test.txt
se você {}
incluir a extensão dos arquivos que deseja encontrar, há um problema de sequência.
Quando você se deparar com um problema em que ele coloca all.txt em all.txt, tente verificar se all.txt existe ou não, se existir, remova
Como isso:
[ -e $"all.txt" ] && rm $"all.txt"
cat *.txt > all.txt
>
substituições de comando all.txt se existir >>
adiciona dados ao arquivo existente
tudo isso é desagradável ....
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
coisas fáceis.
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;