Risposte:
Questo accoda l'output a all.txt
cat *.txt >> all.txt
Questo sovrascrive all.txt
cat *.txt > all.txt
echo *.txt | xargs cat > all.txt
Ricorda, per tutte le soluzioni fornite finora, la shell decide l'ordine in cui i file sono concatenati. Per Bash, IIRC, è in ordine alfabetico. Se l'ordine è importante, è necessario denominare i file in modo appropriato (01file.txt, 02file.txt, ecc ...) o specificare ogni file nell'ordine in cui si desidera concatenarlo.
$ cat file1 file2 file3 file4 file5 file6 > out.txt
Il comando shell di Windows type
può fare questo:
type *.txt >outputfile
Il type
comando di tipo scrive anche i nomi dei file su stderr, che non vengono acquisiti dall'operatore di >
reindirizzamento (ma verranno visualizzati sulla console).
È possibile utilizzare la shell di Windows copy
per concatenare i file.
C:\> copy *.txt outputfile
Dall'aiuto:
Per aggiungere file, specificare un singolo file per la destinazione, ma più file per l'origine (utilizzando i caratteri jolly o il formato file1 + file2 + file3).
Fai attenzione, perché nessuno di questi metodi funziona con un gran numero di file. Personalmente, ho usato questa linea:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
EDIT: come qualcuno ha detto nei commenti, è possibile sostituire $(ls | grep ".txt")
con$(ls *.txt)
EDIT: grazie all'esperienza di @gnourf_gnourf, l'uso di glob è il modo corretto di scorrere i file in una directory. Di conseguenza, espressioni blasfeme come $(ls | grep ".txt")
devono essere sostituite da *.txt
(vedi l'articolo qui ).
Buona soluzione
for i in *.txt;do cat $i >> output.txt;done
for i in $(ls *.txt);do cat $i >> output.txt;done
?
ls | grep
è un antipattern gravemente negativo).
ls *.txt
fallirebbe se ci fossero troppi file (errore dell'elenco argomenti troppo lungo)?
il modo più pragmatico con la shell è il comando cat. altri modi includono,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
cat
metodo sopra concatenerà l'ultima riga e la prima riga dai file adiacenti.
Che ne dici di questo approccio?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
-maxdepth 1
al 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]
Per esempio:
type C:\*.txt > C:\1\all.txt
Ciò prenderà tutti i file txt nella cartella C: \ e li salverà nella cartella C: \ 1 con il nome di all.txt
O
type [source folder]\* > [destination folder]\[file name].[File extension]
Per esempio:
type C:\* > C:\1\all.txt
Ciò richiederà tutti i file presenti nella cartella e li inserirà Contenuto in C: \ 1 \ all.txt
Puoi fare così:
cat [directory_path]/**/*.[h,m] > test.txt
se si utilizza {}
per includere l'estensione dei file che si desidera trovare, c'è un problema di sequenziamento.
Quando si verifica un problema a causa del quale gatta all.txt in all.txt, puoi provare a verificare che all.txt sia esistente o meno, se esiste, rimuovi
Come questo:
[ -e $"all.txt" ] && rm $"all.txt"
cat *.txt > all.txt
>
comando sovrascrive all.txt se esiste >>
aggiunge dati al file esistente
tutto ciò è brutto ....
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
roba facile.
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;